一. 准备工作

1. 传输协议

SMTP协议-->发送邮件:
我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)

POP3协议-->接收邮件:
我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)

2. 邮件收发原理

java发邮件内容含表格 java收发邮件_邮件服务器

  1. 闪电侠网易云邮箱通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
  2. 网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的Smtp服务器
  3. QQ将接收到的邮件存储在 962113063@qq.com这个邮件账号的空间中
  4. 闪电侠qq邮箱通过Pop3协议连接到Pop3服务器收取邮件
  5. 从 962113063@qq.com这个邮件账号的空间中取出邮件
  6. Pop3服务器将取出来的邮件送到闪电侠qq邮箱中

3. QQ邮箱中获取对应的权限

QQ邮箱需要安全验证,我们需要获取他对应的权限;

QQ邮箱-->邮箱设置-->账户

java发邮件内容含表格 java收发邮件_发送邮件_02


java发邮件内容含表格 java收发邮件_发送邮件_03

4. 导入jar包

mail.jar
activation.ja

二. Java发送纯文本邮件

编写测试代码

public class SendMain {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
    Properties prop = <span >new</span> Properties();
    <span >//设置QQ邮件服务器</span>
    prop.setProperty(<span >"mail.host"</span>, <span >"smtp.qq.com"</span>);
    <span >//邮件发送协议</span>
    prop.setProperty(<span >"mail.transport.protocol"</span>, <span >"smtp"</span>);
    <span >//需要验证用户名密码</span>
    prop.setProperty(<span >"mail.smtp.auth"</span>, <span >"true"</span>);

    <span >//关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf = <span >new</span> MailSSLSocketFactory();
    sf.setTrustAllHosts(<span >true</span>);
    prop.put(<span >"mail.smtp.ssl.enable"</span>, <span >"true"</span>);
    prop.put(<span >"mail.smtp.ssl.socketFactory"</span>, sf);

    <span >//使用JavaMail发送邮件的5个步骤</span>
    <span >//1.txt、创建定义整个应用程序所需的环境信息的Session对象</span>
    Session session = Session.getDefaultInstance(prop, <span >new</span> Authenticator() {
        <span ><span >public</span> PasswordAuthentication <span >getPasswordAuthentication</span><span >()</span> </span>{
            <span >//发件人邮件用户名、授权码</span>
            <span >return</span> <span >new</span> PasswordAuthentication(<span >"962113063@qq.com"</span>,
                    <span >"授权码"</span>);
        }
    });

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

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

    <span >//3、使用邮箱的用户名和授权码连上邮件服务器</span>
    ts.connect(<span >"smtp.qq.com"</span>, <span >"962113063@qq.com"</span>, <span >"授权码"</span>);

    <span >//4,创建邮件</span>
    <span >//4-1.txt,创建邮件对象</span>
    MimeMessage message = <span >new</span> MimeMessage(session);

    <span >//4-2,指明邮件的发件人</span>
    message.setFrom(<span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));

    <span >//4-3,指明邮件的收件人</span>
    message.setRecipient(Message.RecipientType.TO, <span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));

    <span >//4-4,邮件标题</span>
    message.setSubject(<span >"Hello"</span>);

    <span >//4-5,邮件文本内容</span>
    message.setContent(<span >"我是钢铁侠!"</span>, <span >"text/html;charset=UTF-8"</span>);

    <span >//4-6,发送邮件</span>
    ts.sendMessage(message, message.getAllRecipients());

    <span >//5,关闭连接</span>
    ts.close();
}


    Properties prop = <span >new</span> Properties();
    <span >//设置QQ邮件服务器</span>
    prop.setProperty(<span >"mail.host"</span>, <span >"smtp.qq.com"</span>);
    <span >//邮件发送协议</span>
    prop.setProperty(<span >"mail.transport.protocol"</span>, <span >"smtp"</span>);
    <span >//需要验证用户名密码</span>
    prop.setProperty(<span >"mail.smtp.auth"</span>, <span >"true"</span>);

    <span >//关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf = <span >new</span> MailSSLSocketFactory();
    sf.setTrustAllHosts(<span >true</span>);
    prop.put(<span >"mail.smtp.ssl.enable"</span>, <span >"true"</span>);
    prop.put(<span >"mail.smtp.ssl.socketFactory"</span>, sf);

    <span >//使用JavaMail发送邮件的5个步骤</span>
    <span >//1.txt、创建定义整个应用程序所需的环境信息的Session对象</span>
    Session session = Session.getDefaultInstance(prop, <span >new</span> Authenticator() {
        <span ><span >public</span> PasswordAuthentication <span >getPasswordAuthentication</span><span >()</span> </span>{
            <span >//发件人邮件用户名、授权码</span>
            <span >return</span> <span >new</span> PasswordAuthentication(<span >"962113063@qq.com"</span>,
                    <span >"授权码"</span>);
        }
    });

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

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

    <span >//3、使用邮箱的用户名和授权码连上邮件服务器</span>
    ts.connect(<span >"smtp.qq.com"</span>, <span >"962113063@qq.com"</span>, <span >"授权码"</span>);

    <span >//4,创建邮件</span>
    <span >//4-1.txt,创建邮件对象</span>
    MimeMessage message = <span >new</span> MimeMessage(session);

    <span >//4-2,指明邮件的发件人</span>
    message.setFrom(<span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));

    <span >//4-3,指明邮件的收件人</span>
    message.setRecipient(Message.RecipientType.TO, <span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));

    <span >//4-4,邮件标题</span>
    message.setSubject(<span >"Hello"</span>);

    <span >//4-5,邮件文本内容</span>
    message.setContent(<span >"我是钢铁侠!"</span>, <span >"text/html;charset=UTF-8"</span>);

    <span >//4-6,发送邮件</span>
    ts.sendMessage(message, message.getAllRecipients());

    <span >//5,关闭连接</span>
    ts.close();
}

}

三. Java发送创建包含内嵌图片的邮件

1. 导入图片

java发邮件内容含表格 java收发邮件_邮件服务器_04

2. 编写测试代码

public class SendMainpicture1 {
    public static void main(String[] args)throws GeneralSecurityException, MessagingException{
        Properties prop = new Properties();
        //设置QQ邮件服务器
        prop.setProperty("mail.host", "smtp.qq.com");
        //邮件发送协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //需要验证用户名密码
        prop.setProperty("mail.smtp.auth", "true");
    <span >//关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf = <span >new</span> MailSSLSocketFactory();
    sf.setTrustAllHosts(<span >true</span>);
    prop.put(<span >"mail.smtp.ssl.enable"</span>, <span >"true"</span>);
    prop.put(<span >"mail.smtp.ssl.socketFactory"</span>, sf);

    <span >//使用JavaMail发送邮件的5个步骤</span>
    <span >//1.txt、创建定义整个应用程序所需的环境信息的Session对象</span>
    Session session = Session.getDefaultInstance(prop, <span >new</span> Authenticator() {
        <span ><span >public</span> PasswordAuthentication <span >getPasswordAuthentication</span><span >()</span> </span>{
            <span >//发件人邮件用户名、授权码</span>
            <span >return</span> <span >new</span> PasswordAuthentication(<span >"962113063@qq.com"</span>,
                    <span >"授权码"</span>);
        }
    });
    <span >//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态</span>
    session.setDebug(<span >true</span>);

    <span >//2、通过session得到transport对象</span>
    Transport ts = session.getTransport();
    <span >//3、使用邮箱的用户名和授权码连上邮件服务器</span>
    ts.connect(<span >"smtp.qq.com"</span>, <span >"962113063@qq.com"</span>, <span >"授权码"</span>);
    <span >//4,创建邮件</span>
    <span >//4-1.txt,创建邮件对象</span>
    MimeMessage message = <span >new</span> MimeMessage(session);
    <span >//4-2,指明邮件的发件人</span>
    message.setFrom(<span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));
    <span >//4-3,指明邮件的收件人</span>
    message.setRecipient(Message.RecipientType.TO, <span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));
    <span >//4-4,邮件标题</span>
    message.setSubject(<span >"Hello,钢铁侠"</span>);
    <span >//5.准备图片</span>
    MimeBodyPart image = <span >new</span> MimeBodyPart();
    DataHandler dh = <span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/9.jpg"</span>));
    image.setDataHandler(dh);
    image.setContentID(<span >"9.jpg"</span>);
    <span >//6.准备正文数据</span>
    MimeBodyPart text = <span >new</span> MimeBodyPart();
    text.setContent(<span >"这是一封邮件正文带图片<img src='cid:9.jpg'>的邮件"</span>, <span >"text/html;charset=UTF-8"</span>);
    <span >//7.描述数据关系</span>
    MimeMultipart mm = <span >new</span> MimeMultipart();
    mm.addBodyPart(text);
    mm.addBodyPart(image);
    mm.setSubType(<span >"related"</span>);
    <span >//设置到消息中,保存修改</span>
    message.setContent(mm);
    message.saveChanges();
    <span >//发送邮件</span>
    ts.sendMessage(message, message.getAllRecipients());
    ts.close();
}


    <span >//关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf = <span >new</span> MailSSLSocketFactory();
    sf.setTrustAllHosts(<span >true</span>);
    prop.put(<span >"mail.smtp.ssl.enable"</span>, <span >"true"</span>);
    prop.put(<span >"mail.smtp.ssl.socketFactory"</span>, sf);

    <span >//使用JavaMail发送邮件的5个步骤</span>
    <span >//1.txt、创建定义整个应用程序所需的环境信息的Session对象</span>
    Session session = Session.getDefaultInstance(prop, <span >new</span> Authenticator() {
        <span ><span >public</span> PasswordAuthentication <span >getPasswordAuthentication</span><span >()</span> </span>{
            <span >//发件人邮件用户名、授权码</span>
            <span >return</span> <span >new</span> PasswordAuthentication(<span >"962113063@qq.com"</span>,
                    <span >"授权码"</span>);
        }
    });
    <span >//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态</span>
    session.setDebug(<span >true</span>);

    <span >//2、通过session得到transport对象</span>
    Transport ts = session.getTransport();
    <span >//3、使用邮箱的用户名和授权码连上邮件服务器</span>
    ts.connect(<span >"smtp.qq.com"</span>, <span >"962113063@qq.com"</span>, <span >"授权码"</span>);
    <span >//4,创建邮件</span>
    <span >//4-1.txt,创建邮件对象</span>
    MimeMessage message = <span >new</span> MimeMessage(session);
    <span >//4-2,指明邮件的发件人</span>
    message.setFrom(<span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));
    <span >//4-3,指明邮件的收件人</span>
    message.setRecipient(Message.RecipientType.TO, <span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));
    <span >//4-4,邮件标题</span>
    message.setSubject(<span >"Hello,钢铁侠"</span>);
    <span >//5.准备图片</span>
    MimeBodyPart image = <span >new</span> MimeBodyPart();
    DataHandler dh = <span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/9.jpg"</span>));
    image.setDataHandler(dh);
    image.setContentID(<span >"9.jpg"</span>);
    <span >//6.准备正文数据</span>
    MimeBodyPart text = <span >new</span> MimeBodyPart();
    text.setContent(<span >"这是一封邮件正文带图片<img src='cid:9.jpg'>的邮件"</span>, <span >"text/html;charset=UTF-8"</span>);
    <span >//7.描述数据关系</span>
    MimeMultipart mm = <span >new</span> MimeMultipart();
    mm.addBodyPart(text);
    mm.addBodyPart(image);
    mm.setSubType(<span >"related"</span>);
    <span >//设置到消息中,保存修改</span>
    message.setContent(mm);
    message.saveChanges();
    <span >//发送邮件</span>
    ts.sendMessage(message, message.getAllRecipients());
    ts.close();
}

}

四. Java发送带图片和附件的复杂邮件

1. 导入附件和图片

java发邮件内容含表格 java收发邮件_服务器_05

2. 编写测试代码

public class SendMainpicture2 {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
        Properties prop = new Properties();
        //设置QQ邮件服务器
        prop.setProperty("mail.host", "smtp.qq.com");
        //邮件发送协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //需要验证用户名密码
        prop.setProperty("mail.smtp.auth", "true");
    <span >//关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf = <span >new</span> MailSSLSocketFactory();
    sf.setTrustAllHosts(<span >true</span>);
    prop.put(<span >"mail.smtp.ssl.enable"</span>, <span >"true"</span>);
    prop.put(<span >"mail.smtp.ssl.socketFactory"</span>, sf);

    <span >//使用JavaMail发送邮件的5个步骤</span>
    <span >//1.txt、创建定义整个应用程序所需的环境信息的Session对象</span>
    Session session = Session.getDefaultInstance(prop, <span >new</span> Authenticator() {
        <span ><span >public</span> PasswordAuthentication <span >getPasswordAuthentication</span><span >()</span> </span>{
            <span >//发件人邮件用户名、授权码</span>
            <span >return</span> <span >new</span> PasswordAuthentication(<span >"962113063@qq.com"</span>,
                    <span >"授权码"</span>);
        }
    });
    <span >//可以通过session开启Dubug模式,查看所有的过程</span>
    session.setDebug(<span >true</span>);


    <span >//2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;</span>
    Transport tp = session.getTransport();
    <span >//3.连接服务器,需要抛出异常;</span>
    tp.connect(<span >"smtp.qq.com"</span>,<span >"962113063@qq.com"</span>,<span >"授权码"</span>);
    <span >//4.连接上之后我们需要发送邮件;</span>
    MimeMessage mimeMessage = imageMail(session);
    <span >//5.发送邮件</span>
    tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
    <span >//6.关闭连接</span>
    tp.close();
}

<span ><span >public</span> <span >static</span> MimeMessage <span >imageMail</span><span >(Session session)</span> <span >throws</span> MessagingException </span>{
    <span >//消息的固定信息</span>
    MimeMessage mimeMessage = <span >new</span> MimeMessage(session);
    <span >//邮件发送人</span>
    mimeMessage.setFrom(<span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));
    <span >//邮件接收人,可以同时发送给很多人</span>
    mimeMessage.setRecipient(Message.RecipientType.TO, <span >new</span> InternetAddress(<span >"624794851@qq.com"</span>));
    mimeMessage.setSubject(<span >"我也不知道是个什么东西就发给你了"</span>); <span >//邮件主题</span>

    <span >//图片</span>
    MimeBodyPart body1 = <span >new</span> MimeBodyPart();
    body1.setDataHandler(<span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/9.jpg"</span>)));
    body1.setContentID(<span >"9.jpg"</span>); <span >//图片设置ID</span>

    <span >//文本</span>
    MimeBodyPart body2 = <span >new</span> MimeBodyPart();
    body2.setContent(<span >"请注意,我不是广告<img src='cid:9.jpg'>"</span>,<span >"text/html;charset=utf-8"</span>);

    <span >//附件</span>
    MimeBodyPart body3 = <span >new</span> MimeBodyPart();
    body3.setDataHandler(<span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/log4j.properties"</span>)));
    body3.setFileName(<span >"log4j.properties"</span>); <span >//附件设置名字</span>

    MimeBodyPart body4 = <span >new</span> MimeBodyPart();
    body4.setDataHandler(<span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/1.txt"</span>)));
    body4.setFileName(<span >"1.txt"</span>); <span >//附件设置名字</span>

    <span >//拼装邮件正文内容</span>
    MimeMultipart multipart1 = <span >new</span> MimeMultipart();
    multipart1.addBodyPart(body1);
    multipart1.addBodyPart(body2);
    multipart1.setSubType(<span >"related"</span>); <span >//1.txt.文本和图片内嵌成功!</span>

    <span >//new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体</span>
    MimeBodyPart contentText =  <span >new</span> MimeBodyPart();
    contentText.setContent(multipart1);

    <span >//拼接附件</span>
    MimeMultipart allFile =<span >new</span> MimeMultipart();
    allFile.addBodyPart(body3); <span >//附件</span>
    allFile.addBodyPart(body4); <span >//附件</span>
    allFile.addBodyPart(contentText);<span >//正文</span>
    allFile.setSubType(<span >"mixed"</span>); <span >//正文和附件都存在邮件中,所有类型设置为mixed;</span>

    <span >//放到Message消息中</span>
    mimeMessage.setContent(allFile);
    mimeMessage.saveChanges();<span >//保存修改</span>

    <span >return</span> mimeMessage;
}


    <span >//关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf = <span >new</span> MailSSLSocketFactory();
    sf.setTrustAllHosts(<span >true</span>);
    prop.put(<span >"mail.smtp.ssl.enable"</span>, <span >"true"</span>);
    prop.put(<span >"mail.smtp.ssl.socketFactory"</span>, sf);

    <span >//使用JavaMail发送邮件的5个步骤</span>
    <span >//1.txt、创建定义整个应用程序所需的环境信息的Session对象</span>
    Session session = Session.getDefaultInstance(prop, <span >new</span> Authenticator() {
        <span ><span >public</span> PasswordAuthentication <span >getPasswordAuthentication</span><span >()</span> </span>{
            <span >//发件人邮件用户名、授权码</span>
            <span >return</span> <span >new</span> PasswordAuthentication(<span >"962113063@qq.com"</span>,
                    <span >"授权码"</span>);
        }
    });
    <span >//可以通过session开启Dubug模式,查看所有的过程</span>
    session.setDebug(<span >true</span>);


    <span >//2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;</span>
    Transport tp = session.getTransport();
    <span >//3.连接服务器,需要抛出异常;</span>
    tp.connect(<span >"smtp.qq.com"</span>,<span >"962113063@qq.com"</span>,<span >"授权码"</span>);
    <span >//4.连接上之后我们需要发送邮件;</span>
    MimeMessage mimeMessage = imageMail(session);
    <span >//5.发送邮件</span>
    tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
    <span >//6.关闭连接</span>
    tp.close();
}

<span ><span >public</span> <span >static</span> MimeMessage <span >imageMail</span><span >(Session session)</span> <span >throws</span> MessagingException </span>{
    <span >//消息的固定信息</span>
    MimeMessage mimeMessage = <span >new</span> MimeMessage(session);
    <span >//邮件发送人</span>
    mimeMessage.setFrom(<span >new</span> InternetAddress(<span >"962113063@qq.com"</span>));
    <span >//邮件接收人,可以同时发送给很多人</span>
    mimeMessage.setRecipient(Message.RecipientType.TO, <span >new</span> InternetAddress(<span >"624794851@qq.com"</span>));
    mimeMessage.setSubject(<span >"我也不知道是个什么东西就发给你了"</span>); <span >//邮件主题</span>

    <span >//图片</span>
    MimeBodyPart body1 = <span >new</span> MimeBodyPart();
    body1.setDataHandler(<span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/9.jpg"</span>)));
    body1.setContentID(<span >"9.jpg"</span>); <span >//图片设置ID</span>

    <span >//文本</span>
    MimeBodyPart body2 = <span >new</span> MimeBodyPart();
    body2.setContent(<span >"请注意,我不是广告<img src='cid:9.jpg'>"</span>,<span >"text/html;charset=utf-8"</span>);

    <span >//附件</span>
    MimeBodyPart body3 = <span >new</span> MimeBodyPart();
    body3.setDataHandler(<span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/log4j.properties"</span>)));
    body3.setFileName(<span >"log4j.properties"</span>); <span >//附件设置名字</span>

    MimeBodyPart body4 = <span >new</span> MimeBodyPart();
    body4.setDataHandler(<span >new</span> DataHandler(<span >new</span> FileDataSource(<span >"src/resources/1.txt"</span>)));
    body4.setFileName(<span >"1.txt"</span>); <span >//附件设置名字</span>

    <span >//拼装邮件正文内容</span>
    MimeMultipart multipart1 = <span >new</span> MimeMultipart();
    multipart1.addBodyPart(body1);
    multipart1.addBodyPart(body2);
    multipart1.setSubType(<span >"related"</span>); <span >//1.txt.文本和图片内嵌成功!</span>

    <span >//new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体</span>
    MimeBodyPart contentText =  <span >new</span> MimeBodyPart();
    contentText.setContent(multipart1);

    <span >//拼接附件</span>
    MimeMultipart allFile =<span >new</span> MimeMultipart();
    allFile.addBodyPart(body3); <span >//附件</span>
    allFile.addBodyPart(body4); <span >//附件</span>
    allFile.addBodyPart(contentText);<span >//正文</span>
    allFile.setSubType(<span >"mixed"</span>); <span >//正文和附件都存在邮件中,所有类型设置为mixed;</span>

    <span >//放到Message消息中</span>
    mimeMessage.setContent(allFile);
    mimeMessage.saveChanges();<span >//保存修改</span>

    <span >return</span> mimeMessage;
}

}