Невозможно отправить электронную почту через Java
Пройдя через пост, предоставленный для той же проблемы, я написал следующий код. Но я получаю следующее исключение:
javax.mail.MessagingException:
Не удалось подключиться к узлу SMTP: smtp.gmail.com, порт: 587; Вложенное исключение: java.net.ConnectException: истекло время ожидания соединения: соединение
public static void main(String[] args) {
String to = "xxx@gmail.com" // valid gmail address.
String from = "yyy@gmail.com"; // valid gmail address
String host = "smtp.gmail.com";
String password = "****"; // password of the gmaill acc used in from
int port = 587;
Properties properties = System.getProperties();
properties.put("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.host",host );
properties.setProperty("mail.smtp.user", from);
properties.setProperty("mail.smtp.password", password);
properties.setProperty("mail.smtp.port", "587");
properties.setProperty("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(properties,null);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Test Mail");
message.setText("This is just a test mail generated");
Transport transport = session.getTransport("smtp");
transport.connect(host,from,password);
InternetAddress[] addresses = new InternetAddress[1];
addresses[0] = new InternetAddress(to);
transport.sendMessage(message,addresses);
System.out.println("Message Sent Successfully");
}catch(MessagingException excp){
System.out.println(excp);
}
}
Может кто-нибудь сказать ошибку, что я делаю. Есть ли в моей учетной записи Gmail какие-либо настройки, которые необходимо настроить для использования SMTP-сервера Gmail?
3 ответа
Попробуйте следующий код. Вам нужно будет скачать javax.mail
пакет (файл JAR), я предположил, что у вас уже будет этот файл JAR, потому что вы попробовали этот код, и, следовательно, я не предоставляю ссылку для загрузки этого файла JAR. Установите правильный путь к классу и импортируйте необходимые пакеты. Позаботьтесь о брандмауэре и выбранном вами порту хоста.
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
final class MailClient
{
private class SMTPAuthenticator extends Authenticator
{
private PasswordAuthentication authentication;
public SMTPAuthenticator(String login, String password)
{
authentication = new PasswordAuthentication(login, password);
}
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return authentication;
}
}
public void mail()
{
try
{
String from = "xyz.com";
String to = "abc.com";
String subject = "Your Subject.";
String message = "Message Text.";
String login = "xyz.com";
String password = "password";
Properties props = new Properties();
props.setProperty("mail.host", "smtp.gmail.com");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
Authenticator auth = new SMTPAuthenticator(login, password);
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
try
{
msg.setText(message);
msg.setSubject(subject);
msg.setFrom(new InternetAddress(from));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
Transport.send(msg);
}
catch (MessagingException ex)
{
Logger.getLogger(MailClient.class.getName()).
log(Level.SEVERE, null, ex);
}
}
}
}
final public class Main
{
public static void main(String...args)
{
new MailClient().mail();
}
}
Есть проблема с подключением. Сначала проверьте подключение к "smtp.gmail.com" .
Перейдите в командную строку и выполните команду ping следующим образом.
ping smtp.gmail.com
Если вы не получили ответ от сервера, возможно, проблема с брандмауэром.
Тайм-аут соединения указывает на то, что он даже не подключается, что означает, что он даже не может получить доступ к вашей учетной записи Gmail, поэтому установка чего-либо там не поможет.
Возможно, вы захотите попробовать простой telnet к этому хосту / порту, чтобы посмотреть, сможете ли вы вообще подключиться. Если вы не можете это сделать, возможно, у вас неправильное расположение соединения или возможные проблемы с межсетевым экраном.