Exception in sending emails from java application : Relaying denied
Solution 1
The smtp server that you are trying to send the mail to is rejecting to relay. If it is your own local server that is not a problem, you may change configurations to relay mails from your mydomain.net . But if it is an external server (gmail for example), you have to use a real registered domain.
To test your code against a mail server, I recommend you to setup a dockerized Apache James Server, create some test users on it and send and receive emails.
Solution 2
This JavaMail FAQ entry should help:
Solution 3
Working code,
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class JavaEmail {
Properties emailProperties;
Session mailSession;
MimeMessage emailMessage;
public static void main(String args[]) throws AddressException,
MessagingException {
JavaEmail javaEmail = new JavaEmail();
javaEmail.setMailServerProperties();
javaEmail.createEmailMessage();
javaEmail.sendEmail();
}
public void setMailServerProperties() {
String emailPort = "587";//gmail's port
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", emailPort);
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.starttls.enable", "true");
}
public void createEmailMessage() throws AddressException,
MessagingException {
String[] toEmails = { "enter to mail ids" };
String emailSubject = "Java Email";
String emailBody = "This is an email sent by JavaMail api.";
mailSession = Session.getDefaultInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
for (int i = 0; i < toEmails.length; i++) {
emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
}
emailMessage.setSubject(emailSubject);
emailMessage.setContent(emailBody, "text/html");//for a html email
//emailMessage.setText(emailBody);// for a text email
}
public void sendEmail() throws AddressException, MessagingException {
String emailHost = "smtp.gmail.com";
String fromUser = "enter from Id";//ignore gmail domain
String fromUserEmailPassword = "enter password";
Transport transport = mailSession.getTransport("smtp");
transport.connect(emailHost, fromUser, fromUserEmailPassword);
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
}
}
Rahul Agrawal
I am having more than 8 years of software development experience into different technologies and frameworks as Masters in Java, J2EE (Struts 1.x, Struts 2, Spring (All Modules), Hibernate, iBATIS, Wicket, Tapestry). I also have working knowledge of C#.Net, ASP.NET, ADO.NET, PHP.
Updated on June 04, 2022Comments
-
Rahul Agrawal almost 2 years
We are using Spring Mail to send emails from java application org.springframework.mail.javamail.JavaMailSenderImpl
Spring Email Configuration is
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" autowire-candidate="default"> <property name="host" value="${test.email.host}" /> <property name="port" value="${test.email.port}" /> <property name="username" value="${test.email.username}" /> <property name="password" value="${test.email.password}" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> </props> </property> </bean>
Java code snapshot is
@Autowired(required = true) @Qualifier("errorMessageMailSender") JavaMailSenderImpl mailSender; .............. .............. try { MimeMessage mailMessage = buildEmailMimeMessage(properties,mimeMultipart); logger.info(String.format("Built MimeMessage object is <%s>",mailMessage)); if (mailMessage != null) { mailSender.send(mailMessage); logger.info("Mail sent Successfully"); }else{ logger.info("Mail send failed as Mail message object construction failed."); } result=true; } catch (Exception e) { logger.error("An exception occurred while sending mail :: " + e.getMessage()); }
Property files
test.email.host=mail.mydomain.net test.email.port=2525 [email protected] test.email.password=mypassword
But we are below exception, and email is not being sent
An exception occurred while sending mail :: Failed messages: javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 <[email protected]>... Relaying denied