您的位置:首页 > 编程语言 > Java开发

学习Javamail总结

2015-08-30 22:04 477 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haiven11/article/details/48110623

关于jar包的使用 可以使用j2ee的jar包  也可以使用mail-1.4.jar  和smtp.jar 这位两者的jar

直接上代码 


package email;

import java.util.Properties;


import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class SendEmai {


    /**  
     * 根据传入的 Seesion 对象创建混合型邮件
     */ 
    public MimeMessage createMessage(Session session) throws Exception {
   

      
 
        MimeMessage msg = new MimeMessage(session);  
        //发件人 地址
        msg.setFrom(new InternetAddress("653766408@qq.com"));  
        //TO为初级收件人,CC为邮件副本抄送,BCC应该是密秘抄送吧
        msg.setRecipient(Message.RecipientType.TO, new InternetAddress("653766408@qq.com"));  
        msg.setSubject("包含附件和显示图片的邮件");  
 
        // 将邮件中各个部分组合到一个"mixed"型的 MimeMultipart 对象  
        MimeMultipart allPart = new MimeMultipart("mixed");  
        
        // 创建邮件附件部分 
        MimeBodyPart attachmentPart = new MimeBodyPart();  
        FileDataSource fds = new FileDataSource("G:\\ForceCheckMD5.cfg");  
        attachmentPart.setDataHandler(new DataHandler(fds));  
        attachmentPart.setFileName(fds.getName());  


        
       
        
        // 用于组合文本和图片,"related"型的MimeMultipart对象  
        MimeMultipart contentMulti = new MimeMultipart("related");  
 
        // 正文的文字部分  
        String body = "<h4>请欣赏作品</h4> </br>" 
                + "<img src = \"cid:bule_jpg\">";  
        MimeBodyPart textBody = new MimeBodyPart();  
        textBody.setContent(body, "text/html;charset=UTF-8");  
        contentMulti.addBodyPart(textBody);  
 
        // 正文的图片部分  
        MimeBodyPart jpgBody = new MimeBodyPart();  
        FileDataSource fds2 = new FileDataSource("G:\\Blue1.jpg");  
        jpgBody.setDataHandler(new DataHandler(fds2)); 
        //此处的名字 必须和 img标签中的值一样
        jpgBody.setContentID("bule_jpg");  
        contentMulti.addBodyPart(jpgBody);  
 
  
        // 邮件的正文部分 包含图片
        MimeBodyPart contentBody = new MimeBodyPart(); 
        //将上边的"related"型的MimeMultipart对象   合成一个完整的正文部分
        contentBody.setContent(contentMulti);  
  
 
        //完整的邮件部分 
        allPart.addBodyPart(attachmentPart);  
        allPart.addBodyPart(contentBody);  
 
        // 将上面混合型的 MimeMultipart 对象作为邮件内容并保存  
        msg.setContent(allPart);  
        msg.saveChanges();  
        return msg;  
    }  
 
    // 测试生成邮件  
    public static void main(String[] args) throws Exception {  
    SendEmai sendEmai = new SendEmai();  
    Properties props = new Properties();
    //设置 用户名 和密码 
        props.put("username", "653766408@qq.com");   
        props.put("password", "whlyww1127809");   
        //使用 smtp 传输协议
        props.put("mail.transport.protocol", "smtp" );  
        props.put("mail.smtp.host", "smtp.qq.com");  
        props.put("mail.smtp.port", "25" );
        // 网上大多数解释  设置了False 可以免认证可以发邮件  其实不是的  我们采用的smtp协议传输邮件 这是必须需要认证的
        props.put("mail.smtp.auth", false);
        
Session session = Session.getInstance(props);
        MimeMessage message = sendEmai.createMessage(session);  

         Transport transport = session.getTransport("smtp");   
         transport.connect(props.getProperty("mail.smtp.host"), props  
                 .getProperty("username"), props.getProperty("password"));   
         transport.sendMessage(message, message.getAllRecipients());  
         transport.close();     
         
    }  


}

使用QQ邮箱测试的  需要先在QQ邮箱设置中 开启POP3/SMTP服务

我使用的SMTP协议作为发送的 当我想使用POP3使用的时候 报错  网上有人说是版本缺少Jar 但是后来我添加了pop3.jar也是没用的 是不是pop3不能发邮件

请各位朋友说说


对于如何实现免认证登陆发送邮件问题 

我 上面说了 使用stmp协议是肯定需要 认证的 不是简单设置一个属性就可以 但是这也留下一个问题  

1:那就是既然不能跳过“认证”这个这个过程。那为什么有这样的属性让我们可以去设置? 

2 :对于免认证  是不是可以通过POP3来实现 因为我在网上查看了下都是使用POP3来作为接受邮件的  POP3是否可以发邮件? 如何使用?


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: