2
votes
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);
}
}
}

im working with above im gettin d following error

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

i have followed the example in

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

how should i get the output..will the above code...work what are the changes that need to be made..im using thunderbird smtp server

1

1 Answers

7
votes

The error indicates that there are two possible Authenticator classes which are being referenced here - namely java.net.Authenticator and javax.mail.Authenticator as the error says.

This is because you have imported java.net.* and javax.mail.* and the compiler does not know which Authenticator you need.

Fix this by explicitly importing

import javax.mail.Authenticator;

OR qualify the Authenticator on line 22 as

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

UPDATE

Since you are having problems with sending the mail, first check whether your network admins have given you permissions to connect to the smtpserver at gmail. Are you behind a proxy?

After creating sess, add this line to the code: sess.setDebug(true);

Look at the messages and see how far you get.

Try the other debug tips given at: http://java.sun.com/products/javamail/FAQ.html#debug

UPDATE 2

I've tried running your code and it works for me including sending the email. I had to add one line for props

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

And of course, change this return new PasswordAuthentication("user", "pass"); to your actual username/password. And "[email protected]" to your actual email id.