Javamail:将邮件复制到已发送文件夹

时间:2015-04-16 08:42:08

标签: java email javamail

我正在尝试使用javamail api发送电子邮件,然后将其复制到已发送的文件夹 我正在使用雅虎邮箱 我可以发送电子邮件,但是复制到已发送文件夹不起作用。

以下是要复制到已发送文件夹的代码:

private void copyIntoSent(Session session,Message msg) throws MessagingException{

        Store store = session.getStore("imap");
        store.connect("imap.mail.yahoo.com", SMTP_AUTH_USER, SMTP_AUTH_PWD);

        Folder folder = (Folder) store.getFolder("Inbox.Sent.Notifications");
        if (!folder.exists()) {
            folder.create(Folder.HOLDS_MESSAGES);
        }
        folder.open(Folder.READ_WRITE);

        folder.appendMessages(new Message[]{msg});
    }

我得到了这个例外:

  

com.sun.mail.util.MailConnectException:无法连接到主机,   port:imap.mail.yahoo.com,143;超时-1;嵌套异常是:     java.net.ConnectException:Connexionendéeparexpirationdedélai   D'attente

我不知道问题是否仅来自我的IMAP设置或者复制到已发送文件夹的方法是错误的。

提前致谢。

编辑:发送电子邮件代码:

Properties properties = System.getProperties();
      // Setup mail server
      properties.put("mail.smtp.starttls.enable", "true");
      properties.put("mail.smtp.host", host);
      properties.put("mail.smtp.user", from);
      properties.put("mail.smtp.password", pass);
      properties.put("mail.smtp.port", "587");
      properties.put("mail.smtp.auth", "true");

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         MimeBodyPart messageBodyPart2 = new MimeBodyPart();      
         String filename = "SendAttachment.java";//change accordingly


         File f = new File("/path_to_file/test.pdf");
         MimeBodyPart attachmentPart = new MimeBodyPart();
         attachmentPart.attachFile(f);


         Multipart multipart = new MimeMultipart();   
         multipart.addBodyPart(attachmentPart);
         message.setContent(multipart);
         // Send message
         Transport transport = session.getTransport("smtp");
         transport.connect(host, from, pass);
         transport.sendMessage(message, message.getAllRecipients());
         copyIntoSent(session, message);
         transport.close();

2 个答案:

答案 0 :(得分:0)

从您的例外情况来看,您的代码似乎正在尝试连接到端口143,这是错误的使用下面的雅虎设置。

Incoming Mail (IMAP) Server
Server - imap.mail.yahoo.com
Port - 993
Requires SSL - Yes

是的,imap允许双向同步,这意味着您远程执行的所有内容都会反映在您的Yahoo Mail帐户中。因此,我认为您不需要将邮件移动到已发送文件夹,默认情况下会反映出来在已发送的帐户邮件中

答案 1 :(得分:0)

您需要在IMAP for Yahoo中使用SSL。将“mail.imap.ssl.enable”设置为“true”。

此外,由于您明确使用了transport.connect,因此您不需要设置“mail.smtp.host”和“mail.smtp.user”;并且没有“mail.smtp.password”属性,因此您也不需要设置它。

你应该change Sesion.getDefaultInstance to Session.getInstance