JavaMail для отправки электронной почты через vps, не требует проверки подлинности, но получает AuthenticationFailedException - почему? - PullRequest
0 голосов
/ 29 декабря 2010

Первоначально я настроил свой сайт для использования своего локального интернет-провайдера для отправки электронной почты через мой сайт. Я хотел бы изменить это и начать отправлять электронную почту через мой VPS. Согласно онлайн-документации (от моего провайдера VPS) у меня есть «POP перед SMTP-аутентификацией». Итак, я не требую аутентификации и не требую безопасного соединения в данный момент.

Я изменил несколько вещей в коде, который использовал для отправки электронной почты через моего местного интернет-провайдера. Вот что у меня есть:

Transport t = null; 
   try {
    String Username = "mrsmith@mydomain.com";
    String Password = "somepassword";

        InternetAddress from = new InternetAddress("mrsmith@mydomain.com", "Bob Smith");                        

    Properties props = new Properties();                                    

   //commented out, since I don't want to use authentication
   //props.setProperty("mail.smtp.auth", "true");           

   props.put("mail.pop3.host", "mydomain.com";
   props.put("mail.smtp.host", "mydomain.com");

   String protocol = "smtp";             
   Session ssn = Session.getInstance(props, null);
   ssn.setDebug(true);  

 t = ssn.getTransport(protocol);    

Store s = ssn.getStore();
s.connect();

  t.connect(SMTP,Username,Password);

//Create the message
Message msg = new MimeMessage(ssn);
msg.setFrom(from);
msg.addRecipient(Message.RecipientType.TO, to);
msg.setSubject(subject);
msg.setContent(body, "text/html");

t.sendMessage(msg, msg.getAllRecipients());
t.close();
s.close();  

Я связался со своим провайдером VPS и после выполнения его инструкций, при настройке кода, я по-прежнему получаю «Ошибка аутентификации». Это после успешного установления соединения с хостом через порт 25.

Может кто-нибудь указать, что мне здесь не хватает?

Редактирование для добавления дополнительной информации

После того, как я добавил store.connect («mailhost», Имя пользователя, Пароль); Заявление о коде, я получил больше, чем когда-либо прежде!

Вот некоторая информация, напечатанная в приглашении tomcat -

DEBUG : getProvider() returning javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc.]
POP3: connecting to host "mydomain.com", port 110, isSSL false
server ready
OK User name accepted, password please
Password somepassword
OK Mailbox open, 0 messages

DEBUG: geProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smpt.SMTPTransport,Sun Microsystems, Inc.]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "mydomain.com", port 25, isSSL false 
220 mydomain.com ESMTP Sendmail 8.14.3/8.14.3; DEC 2010 29
DEBUG SMTP: connected to host "mydomain.com", port: 25
( a lot of additional debug information was here )
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
535 5.7.0 authentication failed
javax.mail.AuthenticationFailedException
  at javax.mail.Service.connect(Service.java:319)
  at javax.mail.Service.connect(Service.java:169)
... continues with more 'at's.

Видите ли вы что-нибудь странное в этой информации? Я не совсем понимаю, почему аутентификация не удалась, когда Pop3 был аутентифицирован с тем же именем пользователя и паролем.

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

POP перед SMTP-аутентификацией в основном означает, что вы должны быть в состоянии доказать, что вы можете получать почту, используя POP3 (используя правильную аутентификацию), прежде чем вам будет разрешено отправлять почту с помощью SMTP (без аутентификации).

Используя Java Mail API, вы можете выполнить аутентификацию на сервере POP3 следующим образом:

Store store = ssn.getStore("pop3");
store.connect("mailhost", Username, Password);

Вы должны выполнить эти вызовы до подключения к SMTP-серверу, поэтому перед подключением к SMTP-серверу (без имени пользователя и пароля) вот так

t.connect();

убедитесь, что вы сначала подключились к магазину.

В своем фрагменте вы все еще аутентифицируетесь по протоколу SMTP, поскольку вы вводите имя пользователя / пароль.

Другой вариант - использовать Commons Email, который имеет встроенную поддержку pop перед проверкой подлинности smtp. Проверьте следующий метод в http://commons.apache.org/email/apidocs/org/apache/commons/mail/Email.html

email.setPopBeforeSMTP(true,popHost,popUsername,popPassword);

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

0 голосов
/ 02 июня 2014

Проверьте, есть ли реализация провайдера (pop3.jar) в вашем пути сборки / классе.

0 голосов
/ 15 марта 2011
Properties props = new Properties();
props.put("mail.smtp.host", "mailserver.com");
Session s = Session.getInstance(props,null);

InternetAddress from = new InternetAddress("mail@mail.com");
InternetAddress to = new InternetAddress(recepeint@server.com");

Для получения дополнительной информации, пожалуйста, посетите:

http://www.itpian.com/Coding/314-SENDING-EMAILS-THROUGH-JAVAMAIL.aspx

...