2016-07-18 6 views
-2

новый парень здесь. Я пытаюсь отправить электронное письмо через java, следующий код, который я использую, находится на этом сайте;отправка электронной почты через программу java

public class NewClass extends Object{ 

public static void main(String [] args) 
{ 

try{ 

    Properties props = new Properties(); 
    props.put("mail.smtp.host", "smtp.mail.yahoo.com"); // for gmail use smtp.gmail.com 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.debug", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.port", "587"); 
    props.put("mail.smtp.socketFactory.port", "587"); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

    Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() { 

     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("[email protected]", "abcd"); 
     } 
    }); 

    mailSession.setDebug(true); // Enable the debug mode 

    Message msg = new MimeMessage(mailSession); 

    //--[ Set the FROM, TO, DATE and SUBJECT fields 
    msg.setFrom(new InternetAddress("[email protected]")); 
    msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]")); 
    msg.setSentDate(new Date()); 
    msg.setSubject("Hello World!"); 

    //--[ Create the body of the mail 
    msg.setText("Hello from my first e-mail sent with JavaMail"); 

    //--[ Ask the Transport class to send our mail message 
    Transport.send(msg); 

}catch(Exception E){ 
    System.out.println("Unable to send Mail"); 
    System.out.println(E); 
} 

}}

Это ошибка, я получаю:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.mail.yahoo.com, port: 587; nested exception is: java.net.SocketException: Connection reset 

Что я здесь делаю неправильно? любая помощь будет оценена, TIA! PS. извините за любые ошибки формата.

+0

Посмотрите здесь рабочий пример: http://stackoverflow.com/questions/11356237/sending-mail-from-yahoo- id-to-other-email-ids-using-javamail-api – StephaneM

+0

Большое спасибо. Я посетил ссылку и нашел код, размещенный Rahul Agrawal там, чтобы быть более работоспособным, чем другие коды, с которыми я столкнулся, хотя я получаю ошибку аутентификации с его, а точнее: «com.sun.mail.smtp.smtpsendfailedexception : 530 5.7.1 требуется аутентификация ". Я разрешил «Менее безопасный вход» в настройках учетной записи yahoo, но проблема не устранена. Какие-либо предложения ? – NewbProg

ответ

0

SSL SMTP-порт для smtp.mail.yahoo.com: 465, а не 587.

Изменить код из:

props.put("mail.smtp.port", "587"); 
props.put("mail.smtp.socketFactory.port", "587"); 

в

props.put("mail.smtp.port", "465"); 
props.put("mail.smtp.socketFactory.port", "465"); 
+0

Справка Yahoo (https://help.yahoo.com/kb/SLN4724.html) говорит «Порт - 465 или 587», поэтому это не должно быть проблемой – Sergej

+0

@Sergej Кажется, вы правы. Я немного искал Google и нашел этот сайт https://www.arclab.com/ru/kb/email/list-of-smtp-and-pop3-servers-mailserver-list.html, который утверждает, что 587 для TSL и 465 для SSL. Поскольку вопрос использует SSLSocketFactory, вероятно, следует использовать 465. – Jokab

+0

Хорошо, тогда это может сработать ... – Sergej