必须首先发出STARTTLS命令

我使用我的Gmail帐户运行这个简单的示例,但它无法正常工作并发出以下错误:

  send failed, exception: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. nv2sm4478384pbb.6 

这是我的代码

  public class Email { public static void main(String [] args) { Properties props = new Properties(); props.put("mail.smtp.host", "smtp.googlemail.com"); props.put("mail.from", "myemail@gmail.com"); Session session = Session.getInstance(props, null); try { MimeMessage msg = new MimeMessage(session); msg.setFrom(); msg.setRecipients(Message.RecipientType.TO, "myemail@hotmail.com"); msg.setSubject("JavaMail hello world example"); msg.setSentDate(new Date()); msg.setText("Hello, world!\n"); Transport.send(msg); } catch (MessagingException mex) { System.out.println("send failed, exception: " + mex); } } } 

您可能正在尝试使用端口25上的Gmail服务器通过未经身份validation的连接将邮件传递给第三方。 Gmail不允许您这样做,因为任何人都可以使用Gmail的服务器向任何其他人发送邮件。 这被称为开放中继,并且在早期是垃圾邮件的常见推动者。 互联网上不再接受开放式继电器。

您需要让SMTP客户端使用经过身份validation的连接(可能是在端口587上)连接到Gmail。

必须更改smtp port和socketFactory

  String to = "reciveremail@xxxx.xxx"; String subject = "subject" String msg ="email text...." final String from ="senderemail@gmail.com" final String password ="senderPassword" Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.host", "smtp.gmail.com"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "465"); props.put("mail.debug", "true"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(from,password); } }); //session.setDebug(true); Transport transport = session.getTransport(); InternetAddress addressFrom = new InternetAddress(from); MimeMessage message = new MimeMessage(session); message.setSender(addressFrom); message.setSubject(subject); message.setContent(msg, "text/plain"); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); transport.connect(); Transport.send(message); transport.close(); } 

希望它对你有用..

添加

 props.put("mail.smtp.starttls.enable", "true"); 

解决了我的问题;)

我的问题是

com.sun.mail.smtp.SMTPSendFailedException:530 5.7.0必须首先发出STARTTLS命令。 u186sm7971862pfu.82 – gsmtp

 at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1609) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1117) at javax.mail.Transport.send0(Transport.java:195) at javax.mail.Transport.send(Transport.java:124) at com.example.sendmail.SendEmailExample2.main(SendEmailExample2.java:53) 

我在构建电子邮件通知应用程序时也面临同样的问题。 你只需要添加一行。 下面一个节省了我的一天。

 props.put("mail.smtp.starttls.enable", "true"); 

com.sun.mail.smtp.SMTPSendFailedException:530 5.7.0必须首先发出STARTTLS命令。 h13-v6sm10627790pgp.13 – gsmtp

 at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1609) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1117) at javax.mail.Transport.send0(Transport.java:195) at javax.mail.Transport.send(Transport.java:124) at com.smruti.email.EmailProject.EmailSend.main(EmailSend.java:99) 

希望这对你有所帮助。

试试这段代码:

 Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.prot", "465"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("PUT THE MAIL SENDER HERE !", "PUT THE PASSWORD OF THE MAIL SENDER HERE !"); } } ); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("PUT THE MAIL SENDER HERE !")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("PUT THE MAIL RECEIVER HERE !")); message.setSubject("MAIL SUBJECT !"); message.setText("MAIL BODY !"); Transport.send(message); } catch (Exception e) { JOptionPane.showMessageDialog(null, e); } 

您必须降低邮件发件人的安全性。 如果问题仍然存在,我认为它可能是由防病毒引起的,试着禁用它..

  String username = "mail@google.com"; String password = "some-password"; String recipient = "myemail@hotmail.com"); Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.from", "myemail@gmail.com"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.port", "587"); props.setProperty("mail.debug", "true"); Session session = Session.getInstance(props, null); MimeMessage msg = new MimeMessage(session); msg.setRecipients(Message.RecipientType.TO, recipient); msg.setSubject("JavaMail hello world example"); msg.setSentDate(new Date()); msg.setText("Hello, world!\n"); Transport transport = session.getTransport("smtp"); transport.connect(username, password); transport.sendMessage(msg, msg.getAllRecipients()); transport.close();