2010-06-03 3 views
2
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("[email protected]")); 
msg.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); 
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); 
} 
} 
}

им работать с выше им собирающего д следующей ошибкипомощи с JavaMail API

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

, как я должен получить output..will приведенный выше код ... работа какие изменения должны быть сделаны .. с использованием сервера smtp thunderbird

ответ

7

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

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

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

import javax.mail.Authenticator; 

ИЛИ квалифицируют Authenticator на линии 22, как

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

UPDATE

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

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

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

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

UPDATE 2

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

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

И, конечно, изменить return new PasswordAuthentication("user", "pass"); к вашему фактическому имени пользователя/пароля. И «[email protected]» на ваш фактический адрес электронной почты.

+0

я изменил код этого ... он отлично работает без ошибок ... но почта отправляется разве я проверил почтовый ящик, но не почта ... !! в чем проблема

javax.mail.Authenticator authenticator = new javax.mail.Authenticator() \t { protected javax.mail.PasswordAuthentication getPasswordAuthentication() \t \t { return new javax.mail.PasswordAuthentication("[email protected]", "pass"); } };
simplyblue

+0

@bobby - см мое обновление – JoseK

+0

hhey im все равно получает ту же команду error.isssue starttls. – simplyblue

Смежные вопросы