Отправить письмо в 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;
}
});