List of usage examples for javax.mail SendFailedException getNextException
public synchronized Exception getNextException()
From source file:com.enonic.esl.net.Mail.java
/** * <p/> Send the mail. The SMTP host is contacted and the mail is sent according to the parameters set. </p> <p/> If it fails, it is * considered a runtime exception. Note that this doesn't make it very failsafe, so care should be taken when one wants fault tolerance. * One solution could be to catch the exception thrown. Another solution could be to use the JavaMail API directly. </p> *///from w w w . j av a 2 s . co m public void send() throws ESLException { // smtp server Properties smtpProperties = new Properties(); if (smtpHost != null) { smtpProperties.put("mail.smtp.host", smtpHost); System.setProperty("mail.smtp.host", smtpHost); } else { smtpProperties.put("mail.smtp.host", DEFAULT_SMTPHOST); System.setProperty("mail.smtp.host", DEFAULT_SMTPHOST); } Session session = Session.getDefaultInstance(smtpProperties, null); try { // create message Message msg = new MimeMessage(session); // set from address InternetAddress addressFrom = new InternetAddress(); if (from_email != null) { addressFrom.setAddress(from_email); } if (from_name != null) { addressFrom.setPersonal(from_name, ENCODING); } ((MimeMessage) msg).setFrom(addressFrom); if ((to.size() == 0 && bcc.size() == 0) || subject == null || (message == null && htmlMessage == null)) { LOG.error("Missing data. Unable to send mail."); throw new ESLException("Missing data. Unable to send mail."); } // set to: for (int i = 0; i < to.size(); ++i) { String[] recipient = to.get(i); InternetAddress addressTo = new InternetAddress(recipient[1]); if (recipient[0] != null) { addressTo.setPersonal(recipient[0], ENCODING); } ((MimeMessage) msg).addRecipient(Message.RecipientType.TO, addressTo); } // set bcc: for (int i = 0; i < bcc.size(); ++i) { String[] recipient = bcc.get(i); InternetAddress addressTo = null; try { addressTo = new InternetAddress(recipient[1]); } catch (Exception e) { System.err.println("exception on address: " + recipient[1]); continue; } if (recipient[0] != null) { addressTo.setPersonal(recipient[0], ENCODING); } ((MimeMessage) msg).addRecipient(Message.RecipientType.BCC, addressTo); } // set cc: for (int i = 0; i < cc.size(); ++i) { String[] recipient = cc.get(i); InternetAddress addressTo = new InternetAddress(recipient[1]); if (recipient[0] != null) { addressTo.setPersonal(recipient[0], ENCODING); } ((MimeMessage) msg).addRecipient(Message.RecipientType.CC, addressTo); } // Setting subject and content type ((MimeMessage) msg).setSubject(subject, ENCODING); if (message != null) { message = RegexpUtil.substituteAll("\\\\n", "\n", message); } // if there are any attachments, treat this as a multipart message. if (attachments.size() > 0) { BodyPart messageBodyPart = new MimeBodyPart(); if (message != null) { ((MimeBodyPart) messageBodyPart).setText(message, ENCODING); } else { DataHandler dataHandler = new DataHandler( new ByteArrayDataSource(htmlMessage, "text/html", ENCODING)); ((MimeBodyPart) messageBodyPart).setDataHandler(dataHandler); } Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // add all attachments for (int i = 0; i < attachments.size(); ++i) { Object obj = attachments.get(i); if (obj instanceof String) { System.err.println("attachment is String"); messageBodyPart = new MimeBodyPart(); ((MimeBodyPart) messageBodyPart).setText((String) obj, ENCODING); multipart.addBodyPart(messageBodyPart); } else if (obj instanceof File) { messageBodyPart = new MimeBodyPart(); FileDataSource fds = new FileDataSource((File) obj); messageBodyPart.setDataHandler(new DataHandler(fds)); messageBodyPart.setFileName(fds.getName()); multipart.addBodyPart(messageBodyPart); } else if (obj instanceof FileItem) { FileItem fileItem = (FileItem) obj; messageBodyPart = new MimeBodyPart(); FileItemDataSource fds = new FileItemDataSource(fileItem); messageBodyPart.setDataHandler(new DataHandler(fds)); messageBodyPart.setFileName(fds.getName()); multipart.addBodyPart(messageBodyPart); } else { // byte array messageBodyPart = new MimeBodyPart(); ByteArrayDataSource bads = new ByteArrayDataSource((byte[]) obj, "text/html", ENCODING); messageBodyPart.setDataHandler(new DataHandler(bads)); messageBodyPart.setFileName(bads.getName()); multipart.addBodyPart(messageBodyPart); } } msg.setContent(multipart); } else { if (message != null) { ((MimeMessage) msg).setText(message, ENCODING); } else { DataHandler dataHandler = new DataHandler( new ByteArrayDataSource(htmlMessage, "text/html", ENCODING)); ((MimeMessage) msg).setDataHandler(dataHandler); } } // send message Transport.send(msg); } catch (AddressException e) { String MESSAGE_30 = "Error in email address: " + e.getMessage(); LOG.warn(MESSAGE_30); throw new ESLException(MESSAGE_30, e); } catch (UnsupportedEncodingException e) { String MESSAGE_40 = "Unsupported encoding: " + e.getMessage(); LOG.error(MESSAGE_40, e); throw new ESLException(MESSAGE_40, e); } catch (SendFailedException sfe) { Throwable t = null; Exception e = sfe.getNextException(); while (e != null) { t = e; if (t instanceof SendFailedException) { e = ((SendFailedException) e).getNextException(); } else { e = null; } } if (t != null) { String MESSAGE_50 = "Error sending mail: " + t.getMessage(); throw new ESLException(MESSAGE_50, t); } else { String MESSAGE_50 = "Error sending mail: " + sfe.getMessage(); throw new ESLException(MESSAGE_50, sfe); } } catch (MessagingException e) { String MESSAGE_50 = "Error sending mail: " + e.getMessage(); LOG.error(MESSAGE_50, e); throw new ESLException(MESSAGE_50, e); } }
From source file:com.youxifan.utils.EMail.java
/** * Send Mail direct//from ww w . j ava2 s .co m * @return OK or error message */ public String send() { log.info("(" + m_smtpHost + ") " + m_from + " -> " + m_to); m_sentMsg = null; // if (!isValid(true)) { m_sentMsg = "Invalid Data"; return m_sentMsg; } // Properties props = System.getProperties(); props.put("mail.store.protocol", "smtp"); props.put("mail.transport.protocol", "smtp"); props.put("mail.host", m_smtpHost); // Bit-Florin David props.put("mail.smtp.port", String.valueOf(m_smtpPort)); // TLS settings if (m_isSmtpTLS) { props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.socketFactory.port", String.valueOf(m_smtpPort)); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); } // Session session = null; try { if (m_auth != null) // createAuthenticator was called props.put("mail.smtp.auth", "true"); // if (m_smtpHost.equalsIgnoreCase("smtp.gmail.com")) { // // TODO: make it configurable // // Enable gmail port and ttls - Hardcoded // props.put("mail.smtp.port", "587"); // props.put("mail.smtp.starttls.enable", "true"); // } session = Session.getInstance(props, m_auth); } catch (SecurityException se) { log.warn("Auth=" + m_auth + " - " + se.toString()); m_sentMsg = se.toString(); return se.toString(); } catch (Exception e) { log.warn("Auth=" + m_auth, e); m_sentMsg = e.toString(); return e.toString(); } try { // m_msg = new MimeMessage(session); m_msg = new SMTPMessage(session); // Addresses m_msg.setFrom(m_from); InternetAddress[] rec = getTos(); if (rec.length == 1) m_msg.setRecipient(Message.RecipientType.TO, rec[0]); else m_msg.setRecipients(Message.RecipientType.TO, rec); rec = getCcs(); if (rec != null && rec.length > 0) m_msg.setRecipients(Message.RecipientType.CC, rec); rec = getBccs(); if (rec != null && rec.length > 0) m_msg.setRecipients(Message.RecipientType.BCC, rec); if (m_replyTo != null) m_msg.setReplyTo(new Address[] { m_replyTo }); // m_msg.setSentDate(new java.util.Date()); m_msg.setHeader("Comments", "Becit Mail"); m_msg.setHeader("Comments", "Becit ERP Mail"); // m_msg.setDescription("Description"); // SMTP specifics m_msg.setAllow8bitMIME(true); // Send notification on Failure & Success - no way to set envid in Java yet // m_msg.setNotifyOptions (SMTPMessage.NOTIFY_FAILURE | SMTPMessage.NOTIFY_SUCCESS); // Bounce only header m_msg.setReturnOption(SMTPMessage.RETURN_HDRS); // m_msg.setHeader("X-Mailer", "msgsend"); // setContent(); m_msg.saveChanges(); // log.fine("message =" + m_msg); // // Transport.send(msg); Transport t = session.getTransport("smtp"); // log.fine("transport=" + t); t.connect(); // t.connect(m_smtpHost, user, password); // log.fine("transport connected"); Transport.send(m_msg); // t.sendMessage(msg, msg.getAllRecipients()); log.info("Success - MessageID=" + m_msg.getMessageID()); } catch (MessagingException me) { Exception ex = me; StringBuffer sb = new StringBuffer("(ME)"); boolean printed = false; do { if (ex instanceof SendFailedException) { SendFailedException sfex = (SendFailedException) ex; Address[] invalid = sfex.getInvalidAddresses(); if (!printed) { if (invalid != null && invalid.length > 0) { sb.append(" - Invalid:"); for (int i = 0; i < invalid.length; i++) sb.append(" ").append(invalid[i]); } Address[] validUnsent = sfex.getValidUnsentAddresses(); if (validUnsent != null && validUnsent.length > 0) { sb.append(" - ValidUnsent:"); for (int i = 0; i < validUnsent.length; i++) sb.append(" ").append(validUnsent[i]); } Address[] validSent = sfex.getValidSentAddresses(); if (validSent != null && validSent.length > 0) { sb.append(" - ValidSent:"); for (int i = 0; i < validSent.length; i++) sb.append(" ").append(validSent[i]); } printed = true; } if (sfex.getNextException() == null) sb.append(" ").append(sfex.getLocalizedMessage()); } else if (ex instanceof AuthenticationFailedException) { sb.append(" - Invalid Username/Password - " + m_auth); } else // other MessagingException { String msg = ex.getLocalizedMessage(); if (msg == null) sb.append(": ").append(ex.toString()); else { if (msg.indexOf("Could not connect to SMTP host:") != -1) { int index = msg.indexOf('\n'); if (index != -1) msg = msg.substring(0, index); String cc = "??"; msg += " - AD_Client_ID=" + cc; } String className = ex.getClass().getName(); if (className.indexOf("MessagingException") != -1) sb.append(": ").append(msg); else sb.append(" ").append(className).append(": ").append(msg); } } // Next Exception if (ex instanceof MessagingException) ex = ((MessagingException) ex).getNextException(); else ex = null; } while (ex != null); // error loop m_sentMsg = sb.toString(); return sb.toString(); } catch (Exception e) { log.warn("", e); m_sentMsg = e.getLocalizedMessage(); return e.getLocalizedMessage(); } // m_sentMsg = SENT_OK; return m_sentMsg; }
From source file:net.wastl.webmail.server.WebMailSession.java
public void handleTransportException(SendFailedException e) { model.setStateVar("send status", e.getNextException().getMessage()); model.setStateVar("valid sent addresses", Helper.joinAddress(e.getValidSentAddresses())); model.setStateVar("valid unsent addresses", Helper.joinAddress(e.getValidUnsentAddresses())); model.setStateVar("invalid addresses", Helper.joinAddress(e.getInvalidAddresses())); sent = true;/*from ww w . j a v a 2s . c o m*/ }