如何在服务器端存储邮件密码?

时间:2009-12-08 11:39:03

标签: java spring weblogic javamail application-server

我需要从部署在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)。那我该怎么办呢?是否可以在服务器上配置登录/密码信息,而不是在应用程序中?

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

3 个答案:

答案 0 :(得分:2)

当我使用websphere atm时,不确定这对weblogic是否有帮助,但我认为它也适用于weblogic:

在春季环境中设置您的用户名和密码:

<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上下文启动时加载,但是,邮件服务器更改的设置是一个非常重大的更改,因此重新启动不会那么不对。

答案 1 :(得分:1)

有一种方法可以做到这一点,即使Weblogic不能自动识别mail.smtp.password属性。您可以像往常一样将此属性添加到 JavaMail Properties 字段,并按如下方式在EJB中发送电子邮件:

@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(); }
        }
    }
}

答案 2 :(得分:0)

使用属性文件已有答案,但可能缺少一个重要方面。此帐户密码是否需要受到保护?

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