When I am trying to send a sample mail to gmail account, am getting com.sun.mail.smtp.SMTPAddressFailedException. Following is the code i have written... Please can somebody help me to resolve the issue?
public class MultiMimes {
public static void main(String[] args) throws Exception{
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", "mailservername");
props.put("mail.debug", "true");
Session session = Session.getDefaultInstance(props,null);
Message message = new MimeMessage(session);
try{
message.setSubject("I am a multipart text/html email" );
Address toAddress =new InternetAddress("my gmail address");
Address fromAddress =new InternetAddress("my organization address");
message.setFrom(fromAddress);
message.addRecipient(Message.RecipientType.TO, toAddress);
MimeMultipart multipart1 = new MimeMultipart("alternative");
// Create text message part
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("am text", "text/plain");
textPart.setHeader("MIME-Version" , "1.0" );
textPart.setHeader("Content-Type" , textPart.getContentType() );
System.out.println("textPart.getContentType():"+textPart.getContentType());
// Create html part
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<html><body><b>am html</b></body></html>", "text/html");
htmlPart.setHeader("MIME-Version" , "1.0" );
htmlPart.setHeader("Content-Type" , "text/html" );
System.out.println("htmlPart.getContentType():"+htmlPart.getContentType());
//adding multiparts to message
multipart1.addBodyPart(htmlPart);
multipart1.addBodyPart(textPart);
message.setContent(multipart1);
//sending message
Transport.send(message);
System.out.println("mail sent successfully");
}catch(AddressException ae){
System.out.println("address exception");
ae.printStackTrace();
}
catch(MessagingException e){
System.out.println("message exception");
e.printStackTrace();
}
}
When i am using an email id from same domain (for ex: somebody@test.com) instead of gmail id, I am receiving the email.
First of all , you need to change your code part to this :
private static final String SMTP_HOST_NAME = "smtp.gmail.com";
Properties prop = new Properties();
prop.put("mail.smtp.host", SMTP_HOST_NAME);
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.port", "587");
prop.put("mail.smtp.auth", "true");
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getDefaultInstance(prop, auth);
session.setDebug(debug);
And here is the SMTPAuthenticator Class :
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
public class SMTPAuthenticator extends Authenticator
{
private static final String SMTP_AUTH_USER = "youremail@gmail.com";
private static final String SMTP_AUTH_PASSWORD = "yourpassword";
public PasswordAuthentication getPasswordAuthentication()
{
String username = SMTP_AUTH_USER;
String password = SMTP_AUTH_PASSWORD;
return new PasswordAuthentication(username, password);
}
}
And please do change your from address to gmail and to address to anything, since your SMTP Authentication is being done by gmail, so that part must belong to gmail.
Hope that might help.
Regards
Thanks to all...As i am new to satckoverflow... I am not able to find exact way to add appropriate comments....
Here I am not trying to send mails via gmail server... I am just trying to send to some gmail user. with this code i am able to send mails to any one within the organization... but not to people outside the organization.
any ways... I found the solution to my problem with "Prophesy Awaits" suggestion... I modified my code as below:
package com.trx;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class MultiMimes {
public static void main(String[] args) throws Exception{
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", "mymailserver");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getDefaultInstance(props, auth);
Message message = new MimeMessage(session);
try{
message.setSubject("I am a multipart text/html email" );
Address toAddress =new InternetAddress("my gmail address");
Address fromAddress =new InternetAddress("my organization address");
message.setFrom(fromAddress);
message.addRecipient(Message.RecipientType.TO, toAddress);
MimeMultipart multipart1 = new MimeMultipart("alternative");
// Create text message part
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("am text", "text/plain");
textPart.setHeader("MIME-Version" , "1.0" );
textPart.setHeader("Content-Type" , textPart.getContentType() );
System.out.println("textPart.getContentType():"+textPart.getContentType());
// Create html part
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<html><body><b>am html</b></body></html>", "text/html");
htmlPart.setHeader("MIME-Version" , "1.0" );
htmlPart.setHeader("Content-Type" , "text/html" );
System.out.println("htmlPart.getContentType():"+htmlPart.getContentType());
//adding multiparts to message
multipart1.addBodyPart(textPart);
multipart1.addBodyPart(htmlPart);
message.setContent(multipart1);
//sending message
Transport.send(message);
System.out.println("mail sent successfully");
}catch(AddressException ae){
System.out.println("address exception");
ae.printStackTrace();
}
catch(MessagingException e){
System.out.println("message exception");
e.printStackTrace();
}
}
}
and i used same SMTPAuthenticator class provided by him... now i am able to send the mails form my organizations mailserver to any email id... Thanks again.
i think the host name is a problem so change mailservername to smtp.gmail.com
for more information use this link
http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/