发送邮件-Java基础

**前言:**其实写这篇文章的时候我内心挺复杂的,所以这篇文章主要部分记录自己的反思,因为发送邮件的知识点不多,就那么一点套路,模板直接就可以用,我把它放文章的最下面。

我抵抗不住诱惑。现在是23:47,两个室友在打游戏,还有一个室友在学教资,是的后天是10.30号,我也报了教资,但是到今天为止,我只学了科三和科一,而且只是简单的过了一遍,并没有花时间去背知识点和练题…怎么说呢?人都是有惰性的吧,我也一样,暑假自己一个人在家,生活作息都很有规律,每天听网课敲代码,也不会觉得枯燥无味,那段时间真的是很认真很认真的去学习。我以为这种状态会持续很久很久,我也幻想着开学后努力的样子:晚上准时准点的睡觉,然后早上早起去学习。但是想象终归是想象,开学后我确实按照在家的习惯敲了好几天代码,但是也就是这好几天,我再一次的开始的我的惰。就把我的认真学习时间算作一周吧(实际上只有两三天),我们是10月8号开的学,现在是10月28日,整整三周,前一周我在学习,而剩下的两周,我是早上睡到8点多,晚上玩到夜里两点半,白天昏昏沉沉仿佛回到高中的时候。我讨厌这样的自己,却又再一次的屈服于现实。是的,我抵抗不住诱惑,稍微有那么一点点吸引我,我就放飞自我。

为什么要考教资呢?。今天早上起来的时候已经八点多了,起来第一件事是坐在桌子前做几套教资试卷,是的,后天就要考教资了,但是我不慌,不是因为我已经复习好了,而是备考这段时间我也想了想自己的未来。我的未开跟考教资有关系吗?答案是有,但是关系不大。那么我就要去考虑一个问题:**为什么要考教资呢?**起初的想法是准备给自己一条后路,因为程序员是个年龄饭,随着年龄的增大,学习能力以及记忆力会下降,这样的话,在公司和求职的过程中就是处于一种劣势的状态,这时候很多程序员就会选择转行,当然也有一小部分的人在竞争中留存下来。思考出的结果是:我不该去报考教资

我不该去报考教资。为什么我不该去报考教资呢?因为在我的想法中,从来就没有打算去当老师,从始至终都没有当老师的这种想法,报考教资算是一种盲目的跟风行为。这里这样说并不是为自己的行为开脱,而是我的想法一直就是这样,只不过有时候思路很混沌罢了,有时候我也不知道自己想的是什么,自己想要的是什么。为什么我一直以来的想法不是当老师呢?第一:教师这个工作不是很自由,我喜欢的工作应是自由的;第二:教师这个行业是有瓶颈的,没有创新,而我偏偏是很喜欢创新的,总是有一些想法想要去实现;第三:教师的工资稳定但不高,作为一个男生,想要养家糊口,单单凭靠教师的死工资是不行的,毕竟一家老小都要自己去养活。从这三点基本上就把不当老师的原因说的清清楚楚了,所以对于后天的考试,我真的不担心。

​ **对于教资考试,我应该懈怠吗?**答案是不,虽然我不担心考试的结果,但是,我也准备了有那么点时间了,虽然掌握的知识不多,但是时间上的消耗如果不寻求一个结果就真的是浪费时间了,所以这个考试不会懈怠,并且要很重视,作为检验自己的一个机会。所以说,明天我会努力复习,最后一天的冲刺

窥探内心的真实想法,我一直揣测自己的内心,到底要不要考研?一直都很迷茫,相信到我这个阶段的时候你也会处于一种迷茫的状态。我们这个专业很好找工作,尤其掌握前沿技术的人。我很喜欢敲代码(以前不喜欢),每当敲出自己想要的程序就很有成就感,那么我到底是专心研究技术呢还是要去考研呢?说实在的,我并不想考研,我很想专心研究代码,然后踏入社会找工作。但是现在很多高薪职位都要求学历,我真的是搞不明白,如果一个人的技术真正的达到一定的境界,跟他自己的学历有关系吗?家里一直给我说考研的事,说现在这种社会,大学生遍地都是,不考研根本不行。就这样,我一直很纠结,我有时会告诉自己,我还是考研吧,很无奈,真的无奈。我很想证明不考研也能打拼出自己的一片天地,但是我没有勇气,因为我知道这就是现实,真实的社会。

​ **我打算考研,不妥协这个社会。**考研就要放弃自己当前的技术研究吗?很多人告诉我,假如你打算考研的话,那你现在就准备考研的事情吧,不要再去研究什么前沿技术,转新去考研。我偏不,研究技术是我的兴趣,没有兴趣学习就像行尸走肉,是没有感情的复读机器,我才不要成为一台机器。我要边研究边考研,当然大部分时间还是放在准备考研上。具体计划我还没有想好,但是初步的想法就是认真准备去考研,同时提升自己的技术,保证不落后。

​ **怎样抵挡诱惑?**如上所述,一点点诱惑就让我放飞自我,但是我自己在家的时候又怎么能静下心来学习呢?人与人是不一样的,有的人是耐不住寂寞,学习需要陪伴,有的人越安静越冷静,而我应该就是后者吧。所以,当我定好目标和详细的备考计划时,我会出去租房住,一个人安安静静的学习。这段时间我也想清楚了一句话,大佬总是孤独的。虽然我并不是什么大佬,但是我对这句话也有那么一点体会,当你懂得越多,你会发现想找一个和你交流的人就很难,甚至根本早不到一个能和你交流的人。

​ 反思结束,下面是发送邮件的笔记代码

用得到的jar包

<dependency>
    <groupId>javax.mailgroupId>
    <artifactId>mailartifactId>
    <version>1.4.7version>
dependency>

一、创建一封邮件保存在本地

package cn.daitools;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;

import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
//创建一个邮件
/**
*
* java实现邮箱发送邮件功能
*
*
* @author WQ
*
*/
public class demo01 {
     
public static void main(String[] args) throws Exception {
     

    // 1. 创建一封邮件
    Properties props = new Properties();
    // 用于连接邮件服务器的参数配置(发送邮件时才需要用到)
    Session session= Session.getInstance(props);        // 根据参数配置,创建会话对象(为了发送邮件准备的)
    MimeMessage message = new MimeMessage(session);     // 创建邮件对象

    /*
     * 也可以根据已有的eml邮件文件创建 MimeMessage 对象
     * MimeMessage message = new MimeMessage(session, new FileInputStream("MyEmail.eml"));
     */

    // 2. From: 发件人
    //    其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
    //    真正要发送时, 邮箱必须是真实有效的邮箱。
    message.setFrom(new InternetAddress("[email protected]", "USER_AA", "UTF-8"));

    // 3. To: 收件人
    message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("[email protected]", "USER_CC", "UTF-8"));
    //    To: 增加收件人(可选)
    message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("[email protected]", "USER_DD", "UTF-8"));
    //    Cc: 抄送(可选)
    message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("[email protected]", "USER_EE", "UTF-8"));
    //    Bcc: 密送(可选)
    message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("[email protected]", "USER_FF", "UTF-8"));

    // 4. Subject: 邮件主题
    message.setSubject("TEST邮件主题", "UTF-8");

    // 5. Content: 邮件正文(可以使用html标签)
    message.setContent("TEST这是邮件正文。。。", "text/html;charset=UTF-8");

    // 6. 设置显示的发件时间
    message.setSentDate(new Date());

    // 7. 保存前面的设置
    message.saveChanges();

    // 8. 将该邮件保存到本地
    OutputStream out = new FileOutputStream("MyEmail.eml");
    message.writeTo(out);
    out.flush();
    out.close();
}
}

二、发送普通邮件

package cn.daitools;

import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.util.Properties;


public class demo02 {
     
public static void main(String[] args) throws GeneralSecurityException, MessagingException, UnsupportedEncodingException {
     
    //配置邮箱连接信息
    Properties prop = new Properties();
    prop.setProperty("mail.host","smtp.qq.com");
    prop.setProperty("mail.transport.protocol","smtp");
    prop.setProperty("mail.smtp.auth","true");

    //设置ssl加密
    MailSSLSocketFactory sf = new MailSSLSocketFactory();
    sf.setTrustAllHosts(true);
    prop.put("mail.smtp.ssl.enable","true");
    prop.put("mail.smtp.ssl.socketFactory",sf);

    //1、创建发送邮件的Seeeion环境
    Session session = Session.getDefaultInstance(prop, new Authenticator() {
     
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
     
            //发件人,授权码
            return new PasswordAuthentication("[email protected]","tujcblipdrbngaef");
        }
    });

//        //开启发送邮件的Debug模式
//        session.setDebug(true);

    //2、通过Session对象得到transport对象
    Transport ts = session.getTransport();

    //3、使用用户名和授权码连上邮箱服务器
    ts.connect("smtp.qq.com","[email protected]","tujcblipdrbngaef");

    //4、创建邮件
    //需要传递Session
    MimeMessage message = new MimeMessage(session);
    //指明发件人
    message.setFrom(new InternetAddress("[email protected]","网站注册","utf-8"));
    //指明邮件的收件人
    message.setRecipient(Message.RecipientType.TO,new InternetAddress("[email protected]"));
    //设置邮件的标题
    message.setSubject("验证码");

    //准备正文数据
    MimeBodyPart textbody = new MimeBodyPart();
    textbody.setContent("code","text/html;charset=utf-8");

    //描述数据关系
    MimeMultipart mm =new MimeMultipart();
    mm.addBodyPart(textbody);
    mm.setSubType("related");

    //将拼装好的mm图文设置为主题
    MimeBodyPart contentText = new MimeBodyPart();
    contentText.setContent(mm);

    //设置消息,保存修改
    message.setContent(mm);
    message.saveChanges();

    //5、发送邮件
    ts.sendMessage(message,message.getAllRecipients());
    //6、关闭连接
    ts.close();
}
}

三、优化代码结构

package cn.daitools;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/*发送一封简单邮件*/
public class demo03 {
     
    public static void main(String[] args) throws Exception {
     

        /*配置基本信息*/
        String fromAddress = "[email protected]";   /*发件人*/
        String token = "tujcblipdrbngaef";      /*授权码*/
        String toAddress = "[email protected]";   /*收件人*/
        String mailHost = "smtp.qq.com";        /*邮箱服务器*/


        /*创建一个对象,表示邮件服务器的信息*/
        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.qq.com");  //设置QQ邮件服务器
        prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
        prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码

        /*进行ssl安全验证*/
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);

        /*创建Session对象,可想想象成办了一张手机卡*/
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
     
            public PasswordAuthentication getPasswordAuthentication() {
     
                //发件人邮件用户名、授权码
                return new PasswordAuthentication(fromAddress, token);
            }
        });

        //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        /*通过Session获得一个对象用来发送消息,可以理解成获得一个插了手机卡的手机*/
        Transport ts = session.getTransport();
        ts.connect(mailHost,fromAddress,toAddress);

        /*手机拿到了,下面可以发送邮件了
        * 创建一封邮件*/
        MimeMessage msg = new MimeMessage(session);

        /*指明发件人*/
        msg.setFrom(new InternetAddress(fromAddress,"呆呆","utf-8"));

        /*指明收件人*/
        msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(toAddress));

        /*设置邮件的标题*/
        msg.setSubject("简单邮件测试");

        /*设置邮件的内容*/
        msg.setContent("大家好,我是呆呆","text/html;charset=utf-8");

        /*发送邮件*/
        ts.sendMessage(msg,msg.getAllRecipients());

        /*关闭连接*/
        ts.close();

    }
}

四、发送一封图文邮件

package cn.daitools;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
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.FileReader;
import java.util.Properties;

//发送文本+图片
public class demo04 {
     
public static void main(String[] args) throws Exception {
     

    /*配置基本信息*/
    String fromAddress = "[email protected]";   /*发件人*/
    String token = "tujcblipdrbngaef";      /*授权码*/
    String toAddress = "[email protected]";   /*收件人*/
    String mailHost = "smtp.qq.com";        /*邮箱服务器*/


    /*创建一个对象,表示邮件服务器的信息*/
    Properties prop = new Properties();
    prop.setProperty("mail.host", "smtp.qq.com");  //设置QQ邮件服务器
    prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
    prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码

    /*进行ssl安全验证*/
    MailSSLSocketFactory sf = new MailSSLSocketFactory();
    sf.setTrustAllHosts(true);
    prop.put("mail.smtp.ssl.enable", "true");
    prop.put("mail.smtp.ssl.socketFactory", sf);

    /*创建Session对象,可想想象成办了一张手机卡*/
    Session session = Session.getDefaultInstance(prop, new Authenticator() {
     
        public PasswordAuthentication getPasswordAuthentication() {
     
            //发件人邮件用户名、授权码
            return new PasswordAuthentication(fromAddress, token);
        }
    });

    //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    session.setDebug(true);

    /*通过Session获得一个对象用来发送消息,可以理解成获得一个插了手机卡的手机*/
    Transport ts = session.getTransport();
    ts.connect(mailHost,fromAddress,toAddress);

    /*手机拿到了,下面可以发送邮件了
     * 创建一封邮件*/
    MimeMessage msg = new MimeMessage(session);

    /*指明发件人 发件人地址,发件人昵称,编码对象*/
    msg.setFrom(new InternetAddress(fromAddress,"daidai","utf-8"));

    /*指明收件人*/
    msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(toAddress));

    /*设置邮件的标题*/
    msg.setSubject("简单邮件测试");

    /*设置邮件的内容*/
    /*============================*/
    /*创建邮件的一部分为图片*/
    final MimeBodyPart body1 = new MimeBodyPart();
    body1.setDataHandler(new DataHandler(new FileDataSource("img/1.png")));
    body1.setContentID("1.png");

    /*准备正文数据*/
    final MimeBodyPart body2 = new MimeBodyPart();
    body2.setContent("","text/html;charset=utf-8");

    /*描述数据关系*/
    final MimeMultipart context = new MimeMultipart();
    context.addBodyPart(body2);
    context.addBodyPart(body1);
    context.setSubType("related");

    /*设置到消息中并保存修改*/
    msg.setContent(context);
    msg.saveChanges();
    /*============================*/

    /*发送邮件*/
    ts.sendMessage(msg,msg.getAllRecipients());

    /*关闭连接*/
    ts.close();

}
}

五、发送一封带有附件的邮件

注意:由于一些协议规则,附件的大小被限制在20m以内,所以20m以上的附件就会报异常

package cn.daitools;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.util.Properties;

//发送附件
public class demo05 {
     
public static void main(String[] args) throws Exception {
     

    /*配置基本信息*/
    String fromAddress = "[email protected]";   /*发件人*/
    String token = "tujcblipdrbngaef";      /*授权码*/
    String toAddress = "[email protected]";   /*收件人*/
    String mailHost = "smtp.qq.com";        /*邮箱服务器*/


    /*创建一个对象,表示邮件服务器的信息*/
    Properties prop = new Properties();
    prop.setProperty("mail.host", "smtp.qq.com");  //设置QQ邮件服务器
    prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
    prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码

    /*进行ssl安全验证*/
    MailSSLSocketFactory sf = new MailSSLSocketFactory();
    sf.setTrustAllHosts(true);
    prop.put("mail.smtp.ssl.enable", "true");
    prop.put("mail.smtp.ssl.socketFactory", sf);

    /*创建Session对象,可想想象成办了一张手机卡*/
    Session session = Session.getDefaultInstance(prop, new Authenticator() {
     
        public PasswordAuthentication getPasswordAuthentication() {
     
            //发件人邮件用户名、授权码
            return new PasswordAuthentication(fromAddress, token);
        }
    });

    //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    session.setDebug(true);

    /*通过Session获得一个对象用来发送消息,可以理解成获得一个插了手机卡的手机*/
    Transport ts = session.getTransport();
    ts.connect(mailHost,fromAddress,toAddress);

    /*手机拿到了,下面可以发送邮件了
     * 创建一封邮件*/
    MimeMessage msg = new MimeMessage(session);

    /*指明发件人 发件人地址,发件人昵称,编码对象*/
    msg.setFrom(new InternetAddress(fromAddress,"daidai","utf-8"));

    /*指明收件人*/
    msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(toAddress));

    /*设置邮件的标题*/
    msg.setSubject("简单邮件测试");

    /*设置邮件的内容*/
    /*============================*/
    /*创建邮件的一部分为图片*/
    final MimeBodyPart body1 = new MimeBodyPart();
    body1.setDataHandler(new DataHandler(new FileDataSource("img/1.png")));
    body1.setContentID("1.png");

    /*准备正文数据*/
    final MimeBodyPart body2 = new MimeBodyPart();
    body2.setContent("","text/html;charset=utf-8");

    /*封装图文信息*/
    final MimeMultipart context = new MimeMultipart();
    context.addBodyPart(body2);
    context.addBodyPart(body1);
    context.setSubType("related");

    /*将图文设置为内容的一部分*/
    final MimeBodyPart body3 = new MimeBodyPart();
    body3.setContent(context);

    /*添加一个附件*/
    final MimeBodyPart body4 = new MimeBodyPart();
    body4.setDataHandler(new DataHandler(new FileDataSource("D:\\desktop\\待整理\\抖音下载助手V1.0.zip")));
    body4.setFileName(MimeUtility.encodeText("抖音下载助手V1.0.zip"));    //使用工具包进行文件名转码,防止中文乱码

    /*最后封装整个邮件信息*/
    final MimeMultipart mail = new MimeMultipart();
    mail.addBodyPart(body3);
    mail.addBodyPart(body4);
    mail.setSubType("mixed");


    /*设置到消息中并保存修改*/
    msg.setContent(mail);
    msg.saveChanges();
    /*============================*/

    /*发送邮件*/
    ts.sendMessage(msg,msg.getAllRecipients());

    /*关闭连接*/
    ts.close();

}
}

今天的记录到此结束,晚安!

你可能感兴趣的:(笔记,心得,java,开发语言,后端)