当前位置: 代码迷 >> J2EE >> Javamail新建邮件后,如何保存进已发送或草稿箱
  详细解决方案

Javamail新建邮件后,如何保存进已发送或草稿箱

热度:59   发布时间:2016-04-17 23:09:13.0
Javamail新建邮件后,怎么保存进已发送或草稿箱?

public void sendMail(String subject, String from, List<String> to, List<String> cc,
List<String> bcc, String bodyText, List<File> files, boolean draft) {
Message message = new MimeMessage(session);
try {
// 设置发件人地址
message.setFrom(new InternetAddress(from));
// 设置主题
message.setSubject(subject);

// 设置收件人
if(to!=null){
for (String item : to) {
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(item));
}
}
// 设置抄送人
if(cc!=null){
for (String item : cc) {
message.addRecipient(Message.RecipientType.CC,
new InternetAddress(item));
}
}
// 设置密送人
if(bcc!=null){
for (String item : bcc) {
message.addRecipient(Message.RecipientType.BCC,
new InternetAddress(item));
}
}

if(draft){
message.setFlag(Flags.Flag.DRAFT, true);
}

// 设置邮件内容
Multipart multipart = new MimeMultipart();
MimeBodyPart txtPart = new MimeBodyPart();
txtPart.setContent(bodyText, "text/html;charset=utf-8");
multipart.addBodyPart(txtPart);


// 添加附件
if (files != null && files.size() > 0) {
for (File f : files) {
MimeBodyPart part = new MimeBodyPart();
FileDataSource fds = new FileDataSource(f); // 得到数据源
part.setDataHandler(new DataHandler(fds)); // 得到附件本身并至入BodyPart
String filename=encodeFileName(fds.getName());
part.setFileName(filename); // 得到文件名同样至入BodyPart
multipart.addBodyPart(part);
}
}

message.setContent(multipart);
message.setFlag(Flags.Flag.RECENT, true);
message.saveChanges();
if(!draft){
Transport transport = session.getTransport("smtp");
            transport.connect(host, userName, passWord);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
}
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}


代码如上,邮件能发给接收人,但是无法存入本人的已发送目录。
而且draft是我用来区分发出去还是暂时存草稿的,也没用,谁能指导一下?200分
------解决思路----------------------
邮件协议里没有“保存已发送”这个东西吧。

这个已发送这个功能明显是客户端的功能,协议里只是规范服务器怎么转发。你既然是直接走协议不走客户端,没有进已发送应该很正常吧
------解决思路----------------------
应该是没有这个方法的,发邮件的时候,点击发送时候客户端自动调用方法,把你发送的邮件显示到发件箱里,读取的应该是邮件自己的数据库,你怎么通过自己的程序存到它的库呢?如果这样的话你只有自己写一个客户端了
------解决思路----------------------
/**
 * 身份认证
 * @author Administrator
 *
 */
public class MyAuthenticator extends Authenticator {
String userName = null;  
    String password = null;  
  
    public MyAuthenticator() {  
    }  
  
    public MyAuthenticator(String username, String password) {  
        this.userName = username;  
        this.password = password;  
    }  
  
    protected PasswordAuthentication getPasswordAuthentication() {  
        return new PasswordAuthentication(userName, password);  
    }  
}