I am sending mail using following code
public void send() throws MessagingException
{
// create some properties and get the Session
Properties props = new Properties();
props.put("mail.smtp.host", this.getSMTPServer());
if( this.getDebugMode() )
props.put("mail.debug", "true");
else
props.put("mail.debug", "false");
//Comment by Sandip for FIRSTMEDIA-578
//props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props, null);
MimeMessage mail = new MimeMessage(session);
//Set Mailer string in Header..
mail.setHeader("X-Mailer", this.getMailer() );
//Set TO Recipients, toList would be of comma separated if multiple addresses are there
if( this.getTo() != null )
{
StringTokenizer st = new StringTokenizer(this.getTo(),",");
InternetAddress[] recList = new InternetAddress[st.countTokens()];
for (int r = 0; st.hasMoreTokens(); r++)
recList[r] = new InternetAddress(st.nextToken().trim());
if(recList.length != 0 )
{
mail.setRecipients(Message.RecipientType.TO, recList);
}
}
//Set CC Recipients, bccList would be of comma separated if multiple addresses are there
if( this.getCc() != null )
{
StringTokenizer st1 = new StringTokenizer(this.getCc(),",");
InternetAddress[] copyList = new InternetAddress[st1.countTokens()];
for (int c = 0; st1.hasMoreTokens(); c++)
copyList[c] = new InternetAddress(st1.nextToken().trim());
if(copyList.length != 0 )
mail.setRecipients(Message.RecipientType.CC, copyList);
}
//Set BCC Recipients, bccList would be of comma separated if multiple addresses are there
if( this.getBcc() != null )
{
StringTokenizer st2 = new StringTokenizer(this.getBcc(),",");
InternetAddress[] bcopyList = new InternetAddress[st2.countTokens()];
for (int c = 0; st2.hasMoreTokens(); c++)
bcopyList[c] = new InternetAddress(st2.nextToken().trim());
if(bcopyList.length != 0 )
mail.setRecipients(Message.RecipientType.BCC, bcopyList);
}
// Create a mime message
mail.setFrom(new InternetAddress(this.getFrom()));
mail.setSubject(subject);
//create mulitple parts to added
Multipart mp = new MimeMultipart();
MimeBodyPart mbp1 = new MimeBodyPart();
//messageMIME can be "text/plain" or "text/html" or anything related to mime
mbp1.setContent(this.getMsgText(),this.getContentType());
mp.addBodyPart(mbp1);
//Adding attachments to mail
if( this.attachmentList != null )
{
for(int i=0; i < this.attachmentList.size() ; i++ )
{
MimeBodyPart mbp = new MimeBodyPart();
FileDataSource fds = new FileDataSource((File)this.attachmentList.elementAt(i));
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
}
mail.setContent(mp);
mail.saveChanges();
mail.setSentDate(new Date());
// Send the message
Transport trans = session.getTransport("smtp");
trans.connect(this.getSMTPServer(), this.getSMTPUsername(), this.getSMTPPassword());
trans.sendMessage(mail, mail.getAllRecipients());
trans.close();
}
With this When mail sending fails to one recipient out of list of recipient all recipient mail send fails.
Is there any change require to send mail to all correct mail recipient from list ?
If you check the Doc, send Message says:
“Send the Message to the specified list of addresses. An appropriate TransportEvent indicating the delivery status is delivered to any TransportListener registered on this Transport. Also, if any of the addresses is invalid, a SendFailedException is thrown. Whether or not the message is still sent succesfully to any valid addresses depends on the Transport implementation. “
You can try to:
SendFailedExceptionand checkgetValidUnsentAddressesto sent to the valid addresses that havenot been sent.
I really prefer the second one 🙂
Check Sent Failed Exception