天天看点

学习Javamail总结

关于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 {

    public MimeMessage createMessage(Session session) throws Exception {

        MimeMessage msg = new MimeMessage(session);  

        //发件人 地址

        msg.setFrom(new InternetAddress("[email protected]"));  

        //TO为初级收件人,CC为邮件副本抄送,BCC应该是密秘抄送吧

        msg.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));  

        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", "[email protected]");   

        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是否可以发邮件? 如何使用?