zoukankan      html  css  js  c++  java
  • 使用javamail发送邮件

    RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。

      邮件头包含的内容有:

    1. from字段   --用于指明发件人
    2. to字段       --用于指明收件人
    3. subject字段  --用于说明邮件主题
    4. cc字段      -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁
    5. bcc字段    -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁

      邮件体指的就是邮件的具体内容。

    我用的是maven项目,pom里面添加下面jar包 

        <dependencies>
            <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>javax.mail-api</artifactId>
                <version>1.4.7</version>
            </dependency>
            <dependency >
                <groupId >javax.mail </groupId >
                <artifactId >mail </artifactId >
                <version >1.4.5 </version >
            </dependency >
            <dependency >
                <groupId >com.sun.mail </groupId >
                <artifactId >javax.mail </artifactId >
                <version >1.5.4 </version >
            </dependency >
        </dependencies>

    版本号可以去网上找最新的修改 

    如果用qq或者126之类的 你需要去他们的官网登录自己的账号去开启pops/stmp服务

    开启之后才能使用,不开启,你测试的时候就会报异常

    简单的代码如下:

    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Address;
    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;
    import java.io.FileOutputStream;
    import java.util.Properties;
    
    
    public class ToMail {
    
        public static void main(String[] args) throws Exception {
            Properties prop = new Properties();
            prop.setProperty("mail.host", "stmp.qq.com");
            prop.setProperty("mail.transport.protocol", "smtp");
            prop.setProperty("mail.smtp.auth", "true");
    
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);
    
            //1.创建session
            Session session = Session.getInstance(prop);
            session.setDebug(true);
            //2.通过Session得到transport对象
            Transport ts = session.getTransport();
            //3.使用邮箱的用户名和密码连上邮件服务器,发送邮件
            //这里特别注意qq和其他的邮箱不一样,他这里输入的不是qq密码,而是你开启stmp服务的时候qq邮箱给你生成的一个授权码,如果输入qq密码会验证不通过
            ts.connect("smtp.qq.com", "123456", "abcdefdfdsefds");
            //4.创建邮件
            Message message = createSimpleMail(session);
            ts.sendMessage(message, message.getAllRecipients());
            ts.close();
        }
    
        /**
         * @Description 创建普通文本邮件
         * @param session
         * @return
         * @throws Exception
         */
        private static MimeMessage createSimpleMail(Session session) throws  Exception {
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
            //指明邮件的发件人
            message.setFrom(new InternetAddress("123456@qq.com"));
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("1234567@qq.com"));
            //邮件的标题
            message.setSubject("只包含文本的简单邮件");
            //邮件的文本内容
            message.setContent("你好啊!", "text/html;charset=UTF-8");
            //返回创建好的邮件对象
            return message;
        }
    
        /**
         * @Description 创建一封带图片的邮件
         * @param session
         * @return
         * @throws Exception
         */
        public static MimeMessage createImageMail(Session session) throws Exception {
            //创建邮件
            MimeMessage message = new MimeMessage(session);
            // 设置邮件的基本信息
            //发件人
            message.setFrom(new InternetAddress("123456@qq.com"));
            //收件人
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("1234567@qq.com"));
            //邮件标题
            message.setSubject("带图片的邮件");
    
            // 准备邮件数据
            // 准备邮件正文数据
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件", "text/html;charset=UTF-8");
            // 准备图片数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource("src\1.jpg"));
            image.setDataHandler(dh);
            image.setContentID("xxx.jpg");
            // 描述数据关系
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(text);
            mm.addBodyPart(image);
            mm.setSubType("related");
    
            message.setContent(mm);
            message.saveChanges();
            //将创建好的邮件写入到E盘以文件的形式进行保存
            message.writeTo(new FileOutputStream("E:\ImageMail.eml"));
            //返回创建好的邮件
            return message;
        }
    
        /**
         * @Description 创建一封带附件的邮件
         * @param session
         * @return
         * @throws Exception
         */
        public static MimeMessage createAttachMail(Session session) throws Exception{
            MimeMessage message = new MimeMessage(session);
    
            //设置邮件的基本信息
            //发件人
            message.setFrom(new InternetAddress("123456@qq.com"));
            //收件人
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("1234567@qq.com"));
            //邮件标题
            message.setSubject("JavaMail邮件发送测试");
    
            //创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("使用JavaMail创建的带附件的邮件", "text/html;charset=UTF-8");
    
            //创建邮件附件
            MimeBodyPart attach = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource("src\2.jpg"));
            attach.setDataHandler(dh);
            attach.setFileName(dh.getName());  //
    
            //创建容器描述数据关系
            MimeMultipart mp = new MimeMultipart();
            mp.addBodyPart(text);
            mp.addBodyPart(attach);
            mp.setSubType("mixed");
    
            message.setContent(mp);
            message.saveChanges();
            //将创建的Email写入到E盘存储
            message.writeTo(new FileOutputStream("E:\attachMail.eml"));
            //返回生成的邮件
            return message;
        }
    }
  • 相关阅读:
    第四百八十天 how can I 坚持
    第四百七十九天 how can I 坚持
    第四百七十八天 how can I 坚持
    第四百七十七天 how can I 坚持
    第四百七十六天 how can I 坚持
    《Java基础知识》JDK安装(Linux)
    《Java周边》vue开发环境搭建(windows)
    《Java Spring框架》Spring切面(AOP)配置详解
    《Java知识应用》Java读写DBF文件
    《Java知识应用》Java发送邮件(QQ,163)
  • 原文地址:https://www.cnblogs.com/cc-java/p/7300740.html
Copyright © 2011-2022 走看看