使用JAVAMAIL发送电子邮件,而不是每次都进行身份验证

时间:2015-03-09 22:32:22

标签: java spring email model-view-controller javamail

您好我正在使用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;
    }

}

2 个答案:

答案 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);

因此,您不必每次都初始化电子邮件发件人,也不必担心会话管理。