Проблема аутентификации SMTP в API javamail - PullRequest
2 голосов
/ 03 июня 2010
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.event.*;
import java.net.*;
import java.util.*;
public class servletmail extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
PrintWriter out=response.getWriter();
response.setContentType("text/html");
try
{
Properties props=new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host","smtp.gmail.com");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator()
    {
    protected PasswordAuthentication getPasswordAuthentication() 
        {
        return new PasswordAuthentication("user", "pass");
    }
};
Session sess=Session.getDefaultInstance(props,authenticator);
Message msg=new MimeMessage(sess);
msg.setFrom(new InternetAddress("abc@gmail.com"));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress("abc@gmail.com"));
msg.setSubject("Hello JavaMail");
msg.setText("Welcome to JavaMail");
Transport.send(msg);
out.println("mail has been sent");
}
catch(Exception e)
{
System.out.println("err"+e);
}
}
}

я работаю с выше, я получаю следующую ошибку

servletmail.java:22: reference to Authenticator is ambiguous, both class java.ne
t.Authenticator in java.net and class javax.mail.Authenticator in javax.mail mat
ch
Authenticator authenticator = new Authenticator()
^
servletmail.java:22: reference to Authenticator is ambiguous, both class java.ne
t.Authenticator in java.net and class javax.mail.Authenticator in javax.mail mat
ch
Authenticator authenticator = new Authenticator()
                                  ^
2 errors

Я последовал примеру в

http://java.sun.com/developer/onlineTraining/JavaMail/contents.html

как мне получить вывод .. будет ли приведенный выше код ... работать Какие изменения необходимо внести ... с помощью SMTP-сервера Thunderbird

1 Ответ

7 голосов
/ 03 июня 2010

Ошибка указывает, что есть два возможных класса Authenticator, на которые здесь ссылаются, а именно java.net.Authenticator and javax.mail.Authenticator, как говорится в ошибке.

Это потому, что вы импортировали java.net. * И javax.mail. *, А компилятор не знает, какой Authenticator вам нужен.

Исправьте это, явно импортировав

import javax.mail.Authenticator;

ИЛИ квалифицирует Аутентификатор в строке 22 как

javax.mail.Authenticator authenticator = new javax.mail.Authenticator()

UPDATE

Поскольку у вас возникают проблемы с отправкой почты, сначала проверьте, дали ли сетевые администраторы вам разрешения на подключение к серверу smtp в gmail. Ты за прокси?

После создания sess добавьте эту строку в код: sess.setDebug(true);

Посмотрите на сообщения и посмотрите, как далеко вы зашли.

Попробуйте другие советы по отладке, приведенные по адресу: http://java.sun.com/products/javamail/FAQ.html#debug

ОБНОВЛЕНИЕ 2

Я попытался запустить ваш код, и он работает для меня, включая отправку электронного письма. Мне пришлось добавить одну строку для реквизита

props.put("mail.smtp.starttls.enable","true");

И, конечно, замените return new PasswordAuthentication("user", "pass"); на свое действительное имя пользователя / пароль. И "abc@gmail.com" на ваш фактический адрес электронной почты.

...