您好我正在使用spring MVC管理仪表板,这是我第一次使用javamail。
我的问题是:我有什么方法可以先对会话进行身份验证,然后使用此实例发送更多未经身份验证的电子邮件? (会议仍然可用)。
使用我正在使用的方法,我需要将发件人的电子邮件和密码保存为“明文”,以便每次都进行身份验证。
所以,当我需要发送/接收电子邮件时,有任何关于如何管理会话以及如何存储电子邮件和密码以进行身份验证的建议吗?
谢谢!
所以这是我用来发送电子邮件的代码:
@Override
public boolean sendEmail(EmailTMP e) throws UnsupportedEncodingException {
String host = "smtp.gmail.com";
final String password=e.getSender().getInboxPassword();
final String from = e.getSender().getInboxEmail();
String name=e.getSender().getNom();
String toAddress = e.getReceiver();
String subject=e.getSubject();
String textContent=e.getContent();
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
<!-- I need to replace the code below to automatically authenticate and get the current session-->
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(toAddress));
message.setSubject(subject);
message.setText(textContent);
InternetAddress fromAddress=new InternetAddress(from, name);
message.setFrom(fromAddress);
Transport.send(message);
return true;
} catch (MessagingException c) {
return false;
}
}
答案 0 :(得分:0)
从会话中获取Transport
对象并继续使用它,使用该实例调用Transport.sendMessage()
,而不是使用静态Transport.send()
方法。完成后请致电Transport.close()
。
答案 1 :(得分:0)
当您使用Spring框架时,可以使用spring提供的JavaMailSenderImpl来实现此目的。 您可以通过以下方式将其配置为spring spring xml文件中的bean:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${email.server.host}"/>
<property name="port" value="${email.server.port}"/>
<property name="username" value="${email.sender.username}"/>
<property name="password" value="${email.sender.password}"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">${email.sender.prop.mail.smtp.auth}</prop>
<prop key="mail.debug">${email.sender.prop.mail.debug}</prop>
<prop key="mail.smtp.socketFactory.class">${email.sender.prop.mail.smtp.socketFactory.class}</prop>
</props>
</property>
</bean>
然后你必须在你的应用程序中获取这个bean来发送电子邮件,例如
@Autowired
private JavaMailSender mailSender;
以下列方式,您将使用它发送电子邮件。
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(textMessage);
mailSender.send(message);
因此,您不必每次都初始化电子邮件发件人,也不必担心会话管理。