发送电子邮件来自java spring

时间:2013-11-06 04:41:05

标签: javamail

<property name="host" value="smtp.gmail.com"/>
<property name="username" value="test@gmail.com"/>
<property name="password" value="abc123456"/>
<property name="port" value="587" />
<property name="javaMailProperties">
   <props>
      <prop key="mail.transport.protocol">smtp</prop> 
      <prop key="mail.smtp.starttls.enable">true</prop> 
      <prop key="mail.smtp.ssl.enable">true</prop>              
      <prop key="mail.smtp.auth">true</prop>
      <prop key="mail.debug">true</prop>
   </props>
 </property>

我得到的错误: DEBUG SMTP RCVD:530 5.7.0必须首先发出STARTTLS命令。 wd6sm44638663pab.3 - gsmtp

DEBUG SMTP SENT:退出 org.springframework.mail.MailSendException:失败的消息:javax.mail.MessagingException:530 5.7.0必须首先发出STARTTLS命令。 wd6sm44638663pab.3 - gsmtp ;消息异常详细信息(1)是: 消息1失败: javax.mail.MessagingException:530 5.7.0必须首先发出STARTTLS命令。 wd6sm44638663pab.3 - gsmtp

已启用STARTTLS,但为什么我再次收到此错误?

此外,当我将传输更改为smtps并将端口更改为SSL时,我没有得到任何响应,它会等待很长时间。

3 个答案:

答案 0 :(得分:1)

我认为jar有问题可能是你没有包含邮件提供商提供的jar。所以使用该jar并将其包含在类路径中并解决错误。

答案 1 :(得分:0)

使用此代码从java发送电子邮件,只需通过在按钮上或您要发送电子邮件的任何其他位置传递所需参数来调用此类的构造函数。

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Properties;

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;
import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;


public class GMailSender {

 public GMailSender(String host,  final String from, final String pass, String to, String sub, String mess) throws Exception {

    Properties props = System.getProperties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", host);
   // props.put("mail.smtp.port", port);

    Authenticator auth = new Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(from, pass);
          }};
    Session session = Session.getInstance(props, auth);

    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress(from));
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
    message.setSubject(sub);
    message.setText(mess);
    Transport.send(message);
    }
 public static void main(String arg[]) throws Exception {

    if(arg.length == 5) {

       StringBuilder message = new StringBuilder();

       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

       String temp = "", subject;

       System.out.print("Enter subject: ");

       subject = br.readLine();

       System.out.println("Enter the message (end it with a . on a single line):");

       while((temp = br.readLine()) != null) {

          if(temp.equals("."))

             break;

          message.append(temp+"\n");
          }

       System.out.println("Sending message...");

       new GMailSender(arg[0], arg[1], arg[2], arg[3], subject, message.toString());

       System.out.println("Sent the message.");

       }

    else System.err.println("Usage:\njava SendTextMail <host> <port> <from> <pass> <to>");
}
}

答案 2 :(得分:0)

您已启用SSL和STARTTLS,但这不起作用。选一个。如果您在端口587上使用Gmail,则需要STARTTLS。

从您的错误消息中,您的属性似乎被忽略。检查配置的其余部分,确保您的属性设置与您正在使用的JavaMail会话匹配。