我需要从部署在Weblogic 10.0上的应用程序发送电子邮件。我尝试将邮件会话属性放在服务器端。 mail.host
或mail.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控制台完成。如何实现?
答案 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)
使用属性文件已有答案,但可能缺少一个重要方面。此帐户密码是否需要受到保护?
如果是这样,您可以考虑加密文件或密钥。代码中的简单嵌入式加密密钥可能就足够了。加密字段或整个文件。