2

我需要从部署在 Weblogic 10.0 上的应用程序发送电子邮件。我尝试将邮件会话属性放在服务器端。属性喜欢mail.hostmail.debug工作正常。但是如何配置密码?现在我在spring配置文件中有它:

<bean id="mailSender"
    class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="session" ref="mailSession"/>
    <property name="username" value="myLogin"></property>
    <property name="password" value="myPassword"></property>
</bean>     
<bean id="alertsMailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>mail/mainSession</value>
    </property>     
    <property name="resourceRef"> 
        <value>true</value>
    </property>
</bean>

我试过mail.smtp.password财产,但它不起作用。Sun 文档说密码没有属性(尽管我mail.smtp.password在一些示例中看到过)。那么我该怎么做呢?是否可以在服务器上而不是在应用程序中配置登录/密码信息?

编辑
你们所有人都建议一些属性文件。我不想要他们。我的应用程序服务器上有一个邮件会话。我通过 JNDI 获得了这个会话。我可以配置那里的主机用于发送邮件等。但我不能在那里输入密码。它不起作用。我希望所有配置都由 Weblogic 控制台完成。如何做到这一点?

4

3 回答 3

2

不确定这是否有助于 weblogic,因为我使用 websphere atm,但我想也可以在 weblogic 中使用:

在您的 spring 上下文中设置您的用户名和密码,如下所示:

<bean id="mailSender" 
    class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="session" ref="mailSession"/>
<property name="username">
    <jee:jndi-lookup jndi-name="config/mail/username" resource-ref="true"/>
</property>
<property name="password">
    <jee:jndi-lookup jndi-name="config/mail/password" resource-ref="true"/>
</property>

并在您的 web.xml 中添加以下内容:

<env-entry>
    <env-entry-name>config/mail/username</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value></env-entry-value>
</env-entry>
<env-entry>
    <env-entry-name>config/mail/password</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value></env-entry-value>
</env-entry>

Spring 将从 Web 应用程序环境中查找用户名和密码的值。weblogic 管理控制台应该允许您配置环境条目以及用户名和密码。请注意,您可能必须重新启动应用程序才能使更改生效,因为它们只会在 spring 上下文启动时加载,但是,邮件服务器更改的设置是一个相当大的更改,所以重新启动不会那么不对劲。

于 2009-12-08T13:31:26.507 回答
1

There is a way to do this, even though Weblogic does not automatically recognize the mail.smtp.password property. You can add this property as usual to the JavaMail Properties field and send the email in your EJB as follows:

@Stateless
public class MailBean {
    @Resource(name="mail/MailSession")
    private Session session;

    public void sendMail() {
        Transport transport = null;
        try {
            Message message = new MimeMessage(session);
            // prepare your mail here...
            transport = session.getTransport("smtp");
            String user = session.getProperty("mail.smtp.user"); 
            String password = session.getProperty("mail.smtp.password");
            transport.connect(user, password);
            message.saveChanges();
            transport.sendMessage(message, message.getAllRecipients());
        } finally {
            if (transport != null) try { transport.close(); } 
            catch (MessagingException e) { e.printStackTrace(); }
        }
    }
}
于 2013-05-02T10:23:09.500 回答
0

已经有关于使用属性文件的答案,但可能缺少一个重要方面。这个账号密码需要保护吗?

如果是这样,您可能会考虑加密文件或密钥。在代码中嵌入一个简单的加密密钥可能就足够了。加密字段或整个文件。

于 2009-12-08T12:29:57.697 回答