【发布时间】:2019-01-15 12:26:05
【问题描述】:
我在配置文件中设置了一个邮件发件人:spring/servlet-context.xml
设置了用户名和密码。
我想出了一个特定的用例,我需要从不同的电子邮件帐户发送邮件。
是否可以在同一个配置文件中进行设置。
起初,我认为这只是添加另一个 bean id,其中设置了另一个电子邮件帐户的用户名和密码,但这对我来说没有意义 JavaMailSender 将如何告诉我每个想要哪个发件人时间?!
我的代码:
在 servlet-context.xml 中:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="port" value="587" />
<property name="username" value="default_email@gmail.com" />
<property name="password" value="***1***" />
<property name="javaMailProperties">
<props>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.debug">false</prop>
<prop key="mail.smtp.sendpartial">true</prop>
</props>
</property>
</bean>
[我想在这里添加:
<bean id="anotherMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
...
<property name="username" value="another_email@gmail.com" />
<property name="password" value="***2***" />
...
</bean>
]
还有一个负责邮件发送的Java类:
public class MailService {
private static JavaMailSender mailSender;
@SuppressWarnings("static-access")
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
public void sendMail(final String aSubject, final String aContent, final String toMail, final List<String> attachedFileUrls, String aFilename) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true,"UTF-8");
helper.setFrom(simpleMailMessage.getFrom());
helper.setTo(toMail);
helper.setSubject("A subject");
helper.setText("some content", true);
} catch (Exception e) {...}
Thread thread = new SendMail1(message);
thread.start();
}
class SendMail1 extends Thread {
MimeMessage message;
SendMail1(MimeMessage message) {
this.message = message;
}
public void run() {
mailSender.send(message);
}
}
}
(更改 setFrom 和 setTo 函数无济于事,因为它们只在 recipent 的邮箱中设置 visual "to" 和 "from")
目前 mailSender 通过上面的配置设置“知道”以某种方式将电子邮件发送到 servlet-context.xml 中设置的电子邮件。
我想添加 sendMailFromSpecialSender 函数,该函数将发送来自其他发件人的电子邮件。
这可能吗?
如果是,那怎么办?
更新:
发布此问题后,我找到了 Bill Shannon 对我的问题的部分答案:
简单的解决方案是为每个发送者使用单独的会话,并一次发送一条消息。
所以...
1. 如何为我的其他发件人案例创建单独的会话?
2. servlet-context.xml 中的配置是否允许与其他配置进行单独的会话,或者我可以保持原样吗?
谢谢
【问题讨论】:
-
我不知道您是如何使用这些 bean 的,但是您必须将另一个 bean 添加到您的 Java 类中。就像你对
mailSender所做的一样,这次使用anotherMailSender然后你就可以在你的函数中使用它了。 -
to @AmirM : 1. 我假设当我定义 JavaMailSender foo 时,它会自动创建带有在 xml 配置文件中定义的属性的 mailSender 对象。因此,我无法按照您的建议做我所理解的事情。 2.查看我的问题的更新,以了解我寻求答案的方向。 3. 谢谢你
-
1.不,不是那样的,如果你有不同类型的bean,你可以实例化它们。有办法,为此。你只需要以某种方式实例化它。也许另一个像
setSimpleMailMessage这样的二传手?也许通过构造函数?自动装配? 2. 我不建议这样做。我不知道该怎么做。
标签: java xml spring dependency-injection jakarta-mail