public void test_assertAttachmentFileWithBadPartNumber() throws Exception { sendMail( "darth.Vader", "luke.Skywalker", "scoop", "Je suis ton pere", new File(getClass().getResource("attachment1.xls").toURI())); List<MailMessage> list = mailFixture.getReceivedMessages(); assertEquals(1, list.size()); MailMessage message = list.get(0); try { message.getMultipart(-1, createMultipartFilePath(-1)); fail(); } catch (Exception e) { assertEquals( "Impossible de décoder la pièce jointe numéro -1. L'index de pièce jointe spécifié (-1) est erroné (nombre de pièces jointes : 1)", e.getMessage()); } try { message.getMultipart(2, createMultipartFilePath(2)); fail(); } catch (Exception e) { assertEquals( "Impossible de décoder la pièce jointe numéro 2. L'index de pièce jointe spécifié (2) est erroné (nombre de pièces jointes : 1)", e.getMessage()); } message.getMultipart(1, createMultipartFilePath(1)); }
public void test_getReceivedMessages() throws Exception { sendMail("darth.Vader", "luke.Skywalker", "scoop", "Je suis ton pere"); List<MailMessage> list = mailFixture.getReceivedMessages(); assertEquals(1, list.size()); MailMessage message = list.get(0); assertEquals("darth.Vader", message.getFrom()); assertEquals("luke.Skywalker", message.getTo()); assertEquals("scoop", message.getSubject()); assertEquals("Je suis ton pere", message.getBody()); }
protected Boolean doInBackground(List<MailMessage>... anexos) { try { List<MailMessage> mails = anexos[0]; boolean parts = mails.size() > 1; int i = 1; int total = mails.size(); boolean media = Utils.getConfiguracao(gmail.getContext()).isMedia(); for (MailMessage mail : mails) { String subject = assunto; String log = "log.zip"; if (parts || media) { if (total > 1) { subject += " - " + i + "/" + total; log = String.format("log %d/%d.zip", i, total); i++; } gmail.addAttachment(log, mail.getZip()); } else { Set<String> keys = mail.getAnexos().keySet(); for (String key : keys) { byte[] anexo = mail.getAnexos().get(key); if (anexo != null) { gmail.addAttachment(key, anexo); } } } gmail.sendMail(subject, "Check the attached file", null, destinatario); Thread.sleep(10000); gmail.clearAttachments(); } return true; } catch (AuthenticationFailedException e) { Log.e(SendEmailAsyncTask.class.getName(), "Bad account details"); e.printStackTrace(); return false; } catch (MessagingException e) { e.printStackTrace(); return false; } catch (Exception e) { e.printStackTrace(); return false; } }
/** * Invokes the endpoint adapter with constructed mail message and headers. * * @param request */ protected Message invokeEndpointAdapter(Message request) { MailMessage mailMessage = (MailMessage) request.getPayload(); if (splitMultipart) { return split(mailMessage.getBody(), request.copyHeaders()); } else { StringResult result = new StringResult(); marshaller.marshal(mailMessage, result); return getEndpointAdapter() .handleMessage(new DefaultMessage(result.toString(), request.copyHeaders())); } }
@Test public void testMailRollsOff() { MailMessage firstMessage = new MailMessageImpl(); firstMessage.appendBody("First Post!"); mailStore.addMessage(firstMessage); assertEquals("First Post!", mailStore.getMessage(0).getBody()); for (int i = 0; i < 100; i++) { addAMessage(); } assertEquals(100, mailStore.getEmailCount()); assertEquals("", mailStore.getMessage(0).getBody()); }
/** * Send Email. Use string array to represents attachments file names. * * @see #sendEmail(String, String, String[], String[], String[], String, File[]) */ private static void sendEmail(String smtpHost, MailMessage mail, boolean isAnonymousEmail) { if (mail == null) { throw new IllegalArgumentException("Param mail can not be null."); } String[] fileNames = mail.getFileNames(); // only needs to check the param: fileNames, other params would be checked through // the override method. File[] files = null; if (fileNames != null && fileNames.length > 0) { files = new File[fileNames.length]; for (int i = 0; i < files.length; i++) { File file = new File(fileNames[i]); files[i] = file; } } sendEmail( smtpHost, mail.getSubject(), mail.getFrom(), mail.getTos(), mail.getCcs(), mail.getBccs(), mail.getContent(), files, isAnonymousEmail); }
public void test_assertAttachmentFilePart0() throws Exception { sendMail( "darth.Vader", "luke.Skywalker", "scoop", "Je suis ton pere", new File(getClass().getResource("attachment1.xls").toURI())); List<MailMessage> list = mailFixture.getReceivedMessages(); assertEquals(1, list.size()); MailMessage message = list.get(0); try { message.getMultipart(0, createMultipartFilePath(0)); fail(); } catch (Exception e) { assertEquals( "La partie '0' est réservée au body. Utilisez plutôt la méthode getBody().", e.getMessage()); } }
public void test_assertAttachmentFiles() throws Exception { File[] attachments = new File[] { new File(getClass().getResource("attachment1.xls").toURI()), new File(getClass().getResource("attachment2.xls").toURI()), }; sendMail("darth.Vader", "luke.Skywalker", "scoop", "Je suis ton pere", attachments); List<MailMessage> list = mailFixture.getReceivedMessages(); assertEquals(1, list.size()); MailMessage message = list.get(0); assertEquals("darth.Vader", message.getFrom()); assertEquals("luke.Skywalker", message.getTo()); assertEquals("scoop", message.getSubject()); assertEquals("Je suis ton pere", message.getBody()); File multipart1 = message.getMultipart(1, createMultipartFilePath(1)); File multipart2 = message.getMultipart(2, createMultipartFilePath(2)); ExcelUtil.compare( new File(getClass().getResource("attachment1.xls").toURI()), multipart1, null, null); ExcelUtil.compare( new File(getClass().getResource("attachment2.xls").toURI()), multipart2, null, null); }
/** * Creates a new mail message model object from message headers. * * @param messageHeaders * @return */ protected MailMessage createMailMessage(Map<String, Object> messageHeaders) { MailMessage message = new MailMessage(); message.setFrom(messageHeaders.get(CitrusMailMessageHeaders.MAIL_FROM).toString()); message.setTo(messageHeaders.get(CitrusMailMessageHeaders.MAIL_TO).toString()); message.setCc(messageHeaders.get(CitrusMailMessageHeaders.MAIL_CC).toString()); message.setBcc(messageHeaders.get(CitrusMailMessageHeaders.MAIL_BCC).toString()); message.setSubject(messageHeaders.get(CitrusMailMessageHeaders.MAIL_SUBJECT).toString()); return message; }
/** * Split mail message into several messages. Each body and each attachment results in separate * message invoked on endpoint adapter. Mail message response if any should be sent only once * within test case. However latest mail response sent by test case is returned, others are * ignored. * * @param bodyPart * @param messageHeaders */ private Message split(BodyPart bodyPart, Map<String, Object> messageHeaders) { MailMessage mailMessage = createMailMessage(messageHeaders); mailMessage.setBody(new BodyPart(bodyPart.getContent(), bodyPart.getContentType())); StringResult result = new StringResult(); Stack<Message> responseStack = new Stack<Message>(); if (bodyPart instanceof AttachmentPart) { marshaller.marshal(mailMessage, result); fillStack( getEndpointAdapter() .handleMessage( new DefaultMessage(result.toString(), messageHeaders) .setHeader( CitrusMailMessageHeaders.MAIL_CONTENT_TYPE, bodyPart.getContentType()) .setHeader( CitrusMailMessageHeaders.MAIL_FILENAME, ((AttachmentPart) bodyPart).getFileName())), responseStack); } else { marshaller.marshal(mailMessage, result); fillStack( getEndpointAdapter() .handleMessage( new DefaultMessage(result.toString(), messageHeaders) .setHeader( CitrusMailMessageHeaders.MAIL_CONTENT_TYPE, bodyPart.getContentType())), responseStack); } if (bodyPart.hasAttachments()) { for (AttachmentPart attachmentPart : bodyPart.getAttachments().getAttachments()) { fillStack(split(attachmentPart, messageHeaders), responseStack); } } return responseStack.isEmpty() ? null : responseStack.pop(); }
/** * Send anonymous email. Note that although we could give any address as from address, (for * example: <b>'[email protected]' is valid</b>), the from of MailMessage should always be the correct format * of email address(for example the <b>'aaaa' is invalid</b>). Otherwise an exception would be * thrown say that username is invalid. * * @param mail The MailMessage object which contains at least all the required attributes to be * sent. */ public static void sendAnonymousEmail(MailMessage mail) { String dns = "dns://"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory"); env.put(Context.PROVIDER_URL, dns); String[] tos = mail.getTos(); try { DirContext ctx = new InitialDirContext(env); for (String to : tos) { String domain = to.substring(to.indexOf('@') + 1); // Get MX(Mail eXchange) records from DNS Attributes attrs = ctx.getAttributes(domain, new String[] {"MX"}); if (attrs == null || attrs.size() <= 0) { throw new java.lang.IllegalStateException( "Error: Your DNS server has no Mail eXchange records!"); } @SuppressWarnings("rawtypes") NamingEnumeration servers = attrs.getAll(); String smtpHost = null; boolean isSend = false; StringBuffer buf = new StringBuffer(); // try all the mail exchange server to send the email. while (servers.hasMore()) { Attribute hosts = (Attribute) servers.next(); for (int i = 0; i < hosts.size(); ++i) { // sample: 20 mx2.qq.com smtpHost = (String) hosts.get(i); // parse the string to get smtpHost. sample: mx2.qq.com smtpHost = smtpHost.substring(smtpHost.lastIndexOf(' ') + 1); try { sendEmail(smtpHost, mail, true); isSend = true; return; } catch (Exception e) { LOGGER.error("", e); buf.append(e.toString()).append("\r\n"); continue; } } } if (!isSend) { throw new java.lang.IllegalStateException("Error: Send email error." + buf.toString()); } } } catch (NamingException e) { LOGGER.error("", e); } }
protected static Future<MimeMessage> send(final MailMessage m) { if (session == null) { setup("localhost"); } if (m.from == null) { m.from = from; } return service.submit( new Callable<MimeMessage>() { @Override public MimeMessage call() throws Exception { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(m.from)); message.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(m.to)); message.setSubject(m.subject); if (m.replyTo != null) { message.setReplyTo(new javax.mail.Address[] {new InternetAddress(m.replyTo)}); } MimeMultipart content = new MimeMultipart(); if (m.message != null) { MimeBodyPart mimeBodyPart = new MimeBodyPart(); mimeBodyPart.setText(m.message); content.addBodyPart(mimeBodyPart); } if (m.htmlMessage != null) { if (content.getCount() > 0) { MimeMultipart alternative = new MimeMultipart("alternative"); alternative.addBodyPart(content.getBodyPart(0)); content = alternative; } MimeBodyPart mimeBodyPart = new MimeBodyPart(); mimeBodyPart.setContent(m.htmlMessage, "text/html"); content.addBodyPart(mimeBodyPart); } if (m.attachments.size() > 0) { MimeMultipart mixed = new MimeMultipart("mixed"); MimeBodyPart body = new MimeBodyPart(); body.setContent(content); mixed.addBodyPart(body); content = mixed; for (MailAttachment ma : m.attachments) { MimeBodyPart attachment = new MimeBodyPart(); DataSource source = new FileDataSource(ma.file); attachment.setDisposition(Part.ATTACHMENT); attachment.setDataHandler(new DataHandler(source)); attachment.setFileName(ma.getName()); content.addBodyPart(attachment); } } message.setContent(content); Transport.send(message); logger.info("Sent email to [{}] with subject [{}].", m.to, m.subject); if (m.attachments.size() > 0) { logger.info("[{}] attachments sent.", m.attachments.size()); } return message; } }); }
@Override public void send(MailMessage message) { if (StringUtils.isEmpty(host)) { String errorText = "SMTP Host can't be null!"; logger.error(errorText); throw new IllegalArgumentException(errorText); } if (message == null) { String errorText = "EmailMessage can't be null!"; logger.error(errorText); throw new IllegalArgumentException(errorText); } Session session; Properties props = new Properties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.host", host); props.put("mail.smtp.port", port); if (useTls) { props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.port", tlsPort); // Note - not really tested. } else if (useSsl) { props.put("mail.smtp.socketFactory.port", sslPort); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.port", sslPort); } if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) { props.put("mail.smtp.auth", "true"); session = Session.getInstance( props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); } else { session = Session.getInstance(props); } try { Message mimeMessage = new MimeMessage(session); mimeMessage.setFrom(new InternetAddress(message.getFrom())); mimeMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(message.getTo())); mimeMessage.setSubject(message.getSubject()); if (!StringUtils.isEmpty(message.getReplyTo())) { mimeMessage.setReplyTo(InternetAddress.parse(message.getReplyTo())); } // Body, plain vs. html MimeMultipart multiPartContent = new MimeMultipart(); if (!StringUtils.isEmpty(message.getBodyPlain())) { MimeBodyPart plain = new MimeBodyPart(); plain.setText(message.getBodyPlain()); multiPartContent.addBodyPart(plain); } if (!StringUtils.isEmpty(message.getBodyHtml())) { MimeBodyPart html = new MimeBodyPart(); html.setContent(message.getBodyHtml(), "text/html"); multiPartContent.addBodyPart(html); multiPartContent.setSubType("alternative"); } mimeMessage.setContent(multiPartContent); Transport.send(mimeMessage); logger.info("Sent email to [{}] with subject [{}].", message.getTo(), message.getSubject()); } catch (MessagingException me) { logger.warn("Failed to send: [{}]", me.getMessage()); me.printStackTrace(); throw new RuntimeException(me); } }