Сначала необходимо выпустить команду STARTTLS

Я использую этот простой пример с моей Gmail записью 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", "[email protected]"); Session session = Session.getInstance(props, null); try { MimeMessage msg = new MimeMessage(session); msg.setFrom(); msg.setRecipients(Message.RecipientType.TO, "[email protected]"); 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); } } } 

Вероятно, вы пытаетесь использовать серверы Gmail на порту 25 для доставки почты третьей стороне по не прошедшему проверку подлинности. Gmail не позволяет вам это делать, потому что тогда кто-то может использовать серверы Gmail для отправки почты кому-либо еще. Это называется открытым ретранслятором и в первые дни является общим средством спама. Открытые реле больше не приемлемы в Интернете.

Вам нужно будет попросить вашего SMTP-клиента подключиться к Gmail с использованием аутентифицированного подключения, возможно, на порту 587 .

порт smtp и socketFactory должны быть изменены

  String to = "[email protected]"; String subject = "subject" String msg ="email text...." final String from ="[email protected]" 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 = "[email protected]"; String password = "some-password"; String recipient = "[email protected]"); Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.from", "[email protected]"); 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(); 
  • Android / Java - разница по дате в днях
  • Как исправить INSTALL_PARSE_FAILED_MANIFEST_MALFORMED в приложении для Android
  • Как передать строку из одной активности в другую?
  • Лучший способ реализовать View.OnClickListener в android
  • Несколько файлов dex определяют / BuildConfig, не могут найти причину:
  • как возобновить прерванную загрузку - часть 2
  • как отображать контакты в списке в Android для Android api 11+
  • Отправка электронной почты на Android с использованием API JavaMail без использования стандартного / встроенного приложения
  • Получение JSONObject из JSONArray
  • Java / Android - Как распечатать полную трассировку стека?
  • Консоль Netbeans не отображает символы юникода Bangla
  • Давайте будем гением компьютера.