Я пытаюсь использовать Код Билла Ящерицы для отправки электронной почты с помощью Google Apps. Я получаю эту ошибку:
Exception in thread "main" javax.mail.SendFailedException: Sending failed;
nested exception is:
javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. f3sm9277120nfh.74
at javax.mail.Transport.send0(Transport.java:219)
at javax.mail.Transport.send(Transport.java:81)
at SendMailUsingAuthentication.postMail(SendMailUsingAuthentication.java:81)
at SendMailUsingAuthentication.main(SendMailUsingAuthentication.java:44)
Код Билла содержит следующую строку, которая, похоже, связана с ошибкой:
props.put("mail.smtp.starttls.enable","true");
Однако это не помогает.
Это мои операторы импорта:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
Кто-нибудь знает об этой ошибке?




Я думаю, это связано с использованием SMTPS вместо SMTP для почтового транспорта. Вот другая версия, созданная по образцу JavaMail: часто задаваемые вопросы о доступе к Gmail. Обратите внимание, что для ясности я опустил всю обработку исключений более тонкого уровня.
private static void send(
final String username,
final String password,
final String recipients,
final String subject,
final String body)
throws Exception
{
final Session session = Session.getInstance(System.getProperties(), null);
final Message msg = new MimeMessage(session);
final String senderEmail = username.contains("@") ? username : (username + "@gmail.com");
msg.setFrom(new InternetAddress(senderEmail));
final Address[] recipientAddresses = InternetAddress.parse(recipients);
msg.setRecipients(Message.RecipientType.TO, recipientAddresses);
msg.setSentDate(new Date());
msg.setSubject(subject);
msg.setText(body);
final Transport transport = session.getTransport("smtps");
transport.connect(GMAIL_SMTP_HOST, GMAIL_SMTP_PORT, username, password);
transport.sendMessage(msg, recipientAddresses);
transport.close();
}
Похоже, файлы ресурсов JavaMail отсутствуют или повреждены (см. java.sun.com/products/javamail/javadocs/javax/mail/Session.h tml). Внутри mail.jar / META-INF есть копии файлов по умолчанию.
Я нашел проблему. Раньше я использовал j2ee.jar для импорта javax.mail.
Я удалил j2ee.jar из пути к классам, загрузил JavaMail 1.4.1 и поместил в свой путь к классам два jar-файла, smtp.jar и mailapi.jar. Сейчас использую smtps вместо smtp
Transport transport = session.getTransport("smtps");
Теперь код Билла Ящера работает.
Это версия java mail API. Я столкнулся с этой проблемой и только что обновил API почты Java до версии 1.4.3. Он отлично работает для меня!
Спасибо!
У меня была такая же проблема при использовании 1.4.2, обновление до 1.4.3 не было решением. Не уверен, что проблема в версии.
Установите следующие теги. Это будет работать.
props.put("mail.smtp.user","username");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "25");
props.put("mail.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.EnableSSL.enable","true");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
вроде бы разумно, а зачем ты с 25 портом возишься? он в основном всегда блокируется интернет-провайдерами и фактически сбрасывается до 465 несколькими строками позже ...
Это сводило меня с ума, и я просто хотел добавить то, что сработало для меня. Мне пришлось обновить мою версию JavaMail (1.4.5), чтобы это работало - я не уверен, какая версия использовалась раньше.
Когда я обновился до новой версии JavaMail, у меня сработал следующий код (можно раскомментировать строки отладки, чтобы получить дополнительную информацию об отладке - порт был 587, а хост - smtp.gmail.com):
public void sendMailWithAuth(String host, String user, String password,
String port, List<String> toList, String htmlBody,
String subject) throws Exception {
Properties props = System.getProperties();
props.put("mail.smtp.user",user);
props.put("mail.smtp.password", password);
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
//props.put("mail.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.EnableSSL.enable","true");
Session session = Session.getInstance(props, null);
//session.setDebug(true);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
// To get the array of addresses
for (String to: toList) {
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
}
message.setSubject(subject);
message.setContent(htmlBody, "text/html");
Transport transport = session.getTransport("smtp");
try {
transport.connect(host, user, password);
transport.sendMessage(message, message.getAllRecipients());
} finally {
transport.close();
}
}
попробуй это:
включить: разрешить менее безопасные приложения для вашей учетной записи Gmail
Я получаю следующее исключение при выполнении вашего кода: Исключение в потоке "main" javax.mail.NoSuchProviderException: Нет поставщика для smtps