Отправить письмо в Java

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

java code:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
{
   public static void main(String [] args)
   {   

     String to = "prakash_d22@rediffmail.com";    
      String from = "web@gmail.com";    
      String host = "localhost";    
      Properties properties = System.getProperties();    
      properties.setProperty("smtp.gmail.com", host);   
          Session session = Session.getDefaultInstance(properties); 
      try{         
         MimeMessage message = new MimeMessage(session);     
         message.setFrom(new InternetAddress(from));        
         message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));      
         message.setSubject("This is the Subject Line!");        
         message.setText("This is actual message");       
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

ошибка:

Пожалуйста, ведите меня.

2 ответа

            String host = "smtp.gmail.com";

            Properties properties = new Properties();

установить следующие свойства

        properties .put("mail.smtp.starttls.enable", "true");
        properties .put("mail.smtp.host", host);
        properties .put("mail.smtp.user", username);
        properties .put("mail.smtp.password", password);
        properties .put("mail.smtp.port", "587");
        properties .put("mail.smtp.auth", "true");

Вы читали Основы JavaMail API?

В любом случае, из того, что я могу сказать, проблема в том, что вы используете неверную конфигурацию.

properties.setProperty("smtp.gmail.com", host);

Как видно из документации по API JavaMail, JavaMail не поддерживает свойство с именем smtp.gmail.com, То, что вы, вероятно, намеревались, было на самом деле...

properties.setProperty("mail.smtps.host", host);

Я подозреваю, что вы хотите использовать SMTP-сервер Gmail, а не один из localhost как у вас сейчас, поэтому я бы посоветовал изменить ваш код так, чтобы...

final String host = "smtp.gmail.com";

Вы также хотите использовать аутентификацию, которая JavaMail предлагает вам сделать в их FAQ по Gmail следующее:

properties.setProperty("mail.smtps.auth", "true");

Обратите внимание, что для отправки почты как таковой требуется Gmail. Похоже, другой ответ предполагает, что вы можете настроить имя пользователя / пароль, используя свойства сеанса; к сожалению, это неверно.

Что вы хотите сделать, это использовать Authenticator,

final Session session = Session.getInstance(properties, new Authenticator() {

  static final PasswordAuthentication AUTH = new PasswordAuthentication(USER, PASS);

  protected PasswordAuthentication getPasswordAuthentication() {
    return AUTH;
  }
});
Другие вопросы по тегам