Ejemplo n.º 1
1
  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));
  }
Ejemplo n.º 2
0
  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;
    }
  }
Ejemplo n.º 4
0
  /**
   * 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()));
    }
  }
Ejemplo n.º 5
0
  @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());
  }
Ejemplo n.º 6
0
 /**
  * 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);
 }
Ejemplo n.º 7
0
  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());
    }
  }
Ejemplo n.º 8
0
  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);
  }
Ejemplo n.º 9
0
 /**
  * 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;
 }
Ejemplo n.º 10
0
  /**
   * 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();
  }
Ejemplo n.º 11
0
 /**
  * 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);
   }
 }
Ejemplo n.º 12
0
  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;
          }
        });
  }
Ejemplo n.º 13
0
  @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);
    }
  }