我正在尝试使用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();
答案 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”属性,因此您也不需要设置它。