Проблема TLS при отправке в gmail через JavaMail - PullRequest
8 голосов
/ 29 июня 2011

Оказывается, что JavaMail немного более разочаровывает, чем я думал.Я посмотрел несколько примеров в Интернете о том, как отправить простую SMTP-электронную почту через серверы Gmail (но не через SSL).Попробовав несколько разных примеров кода, я продолжаю делать вывод об одном и том же примере исключения, когда вызываю transport.connect().Я продолжаю получать эту трассировку стека:

Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. l10sm302158wfk.21
     at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
     at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
     at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)
     at SendEmail.main(SendEmail.java:47)

Может кто-нибудь сказать мне, что я должен добавить или сделать, чтобы это исправить?

Вот мой код:

    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.host", "smtp.gmail.com");
    props.put("mail.user", "blahblah@gmail.com");
    props.put("mail.password", "blah");
    props.put("mail.port", "587");

    Session mailSession = Session.getDefaultInstance(props, null);
    Transport transport = mailSession.getTransport();

    MimeMessage message = new MimeMessage(mailSession);
    message.setSubject("This is a test");
    message.setContent("This is a test", "text/plain");
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("blahblah2@gmail.com"));

    transport.connect();
    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
    transport.close();

Ответы [ 3 ]

13 голосов
/ 29 июня 2011

Вам необходимо включить STARTTLS.Добавьте еще одно свойство в вашу конфигурацию:

props.put("mail.smtp.starttls.enable", "true");
5 голосов
/ 03 февраля 2012
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class CopyOfSendMail {

private static String SMPT_HOSTNAME = "my smtp port no";
private static String USERNAME = "root";
private static String PASSWORD = "root";

public static void main(String[] args) {
    Properties props = new Properties();
    props.put("mail.smtp.host", SMPT_HOSTNAME);
    props.put("mail.from","aaa@gmail.com");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");

    Session session = Session.getInstance(props, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(USERNAME, PASSWORD);
        }
    });
    try {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom();
        msg.setRecipients(Message.RecipientType.TO,
                          "bbb@gmail.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);
     }
    }
}
1 голос
/ 09 июля 2013

Здесь Mail Sender, использующий службу MSN-SMTP

Мой хост smtp.live.com и порт 587.

Как указано в официальном документе Java Mail , здесь вы можете получить дополнительную информацию о лучшем механизме Java Mail для отправки и получения почты.

Свойства почтового клиента:

  Properties mailProps = new Properties();
  mailProps.put("mail.smtp.user",mailID);
  mailProps.put("mail.smtp.host",host);
  mailProps.put("mail.smtp.auth", "true");
  mailProps.put("mail.smtp.port",port);
  mailProps.put("mail.smtp.starttls.enable", "true");
  Session mailSession = Session.getInstance(mailProps,null);

Отправляющий механизм:

 SMTPTransport t=(SMTPTransport)mailSession.getTransport("smtp");
 System.out.println(" Taking protocol! ");
 t.connect(host, mailID, password);
 System.out.println(" Connection Successfull! ");
 t.sendMessage(mimMessage,mimMessage.getAllRecipients());

Примечание:
Код работает на локальном Индийском сервере. Но это не отвечает на Azur Congo : оба сервера Linux.

Ошибка:

 com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first

Даже если системное свойство установлено вручную:

 java -Dmail.smtp.starttls.enable=true SendAMai

также обеспечиваются очки @Rob Harrop и @Brian

if you're on Linux ensure that you have libnss3 and openssl installed
...