2009-12-08 14 views
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控制台完成所有的配置。如何实现这一目标?

回答

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

+0

似乎是最好的主意。不幸的是Weblogic管理控制台没有环境变量的编辑器。或者我找不到它。无论如何,我接受你的答案,因为我得到的是最有用的东西。 –

0

已经有使用属性文件的答案,但可能会丢失一个重要方面。此帐户密码是否需要保护?

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

1

即使Weblogic不能自动识别mail.smtp.password属性,仍有一种方法可以执行此操作。可以将该属性照常添加到的JavaMail属性领域,在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(); } 
     } 
    } 
} 
相关问题