Невозможно отправить электронную почту через Java - PullRequest
2 голосов
/ 23 декабря 2011

Пройдя через пост, предоставленный для той же проблемы, я написал следующий код.Но я получаю следующее исключение:

javax.mail.MessagingException: Не удалось подключиться к узлу SMTP: smtp.gmail.com, порт: 587;Вложенное исключение: java.net.ConnectException: истекло время ожидания соединения: connect

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 ]

1 голос
/ 23 декабря 2011

Проблема с подключением.сначала проверьте подключение к «smtp.gmail.com».

Перейдите в командную строку и выполните команду ping следующим образом.

ping smtp.gmail.com

, если вы не используетеполучить ответ от сервера может быть проблема с брандмауэром.

1 голос
/ 23 декабря 2011

Попробуйте следующий код. Вам нужно будет загрузить пакет 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();
    }
}
0 голосов
/ 23 декабря 2011

Тайм-аут соединения указывает на то, что он даже не соединяется, что означает, что он не может даже получить доступ к вашей учетной записи Gmail, поэтому установка чего-либо там не поможет.

Возможно, вы захотите подключиться к этому хосту / порту с помощью простого telnet, чтобы посмотреть, сможете ли вы вообще подключиться. Если вы не можете это сделать, возможно, у вас неправильное расположение соединения или возможные проблемы с брандмауэром.

...