邮件发送(java)

1.创建maven项目

2.导包

<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>mail</artifactId>
  <version>1.4.7</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
  <groupId>javax.activation</groupId>
  <artifactId>activation</artifactId>
  <version>1.1.1</version>
</dependency>

两个有关邮件发送的java包

3.获取qq邮箱授权码

 

 4.普通文本邮件

import com.sun.mail.util.MailSSLSocketFactory;
import com.sun.mail.util.LineOutputStream;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

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

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

        // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可。大厂,其他邮箱不需要。
        //我这里加上这段报错,注掉就好了,不知道咋回事。
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);

        //使用JavaMail发送邮件的5个步骤:

        //1、创建定义整个应用程序所需的环境信息的 Session 对象。
        //QQ才有!其他邮箱不需要。
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //发件人邮件用户名、授权码。
                return new PasswordAuthentication("2861532035@qq.com", "自己的授权码");
            }
        });

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

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

        //3、使用邮箱的用户名和授权码连上SMTP邮件服务器。
        ts.connect("smtp.qq.com", "2861532035@qq.com", "自己的授权码");

        //4、创建邮件:写邮件。
        //注意需要传递Session。
        MimeMessage message = new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("2861532035@qq.com"));

        //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发。
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("2861532035@qq.com"));
        //邮件的标题。
        message.setSubject("简单邮件发送实现");
        //邮件的文本内容。可以写html语句。
        message.setContent("<h2 style='color:red'>你好啊!</h2>", "text/html;charset=UTF-8");


//此处加入下面所需代码

        //5、发送邮件
        ts.sendMessage(message, message.getAllRecipients());

        //6、关闭连接
        ts.close();
    }
}

5.包含图片的非附件邮件

//发送包含图片的复杂邮件==========================================

//准备图片数据。
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("D:\\桌面\\大二上综测分\\志愿时.jpg"));
image.setDataHandler(dh);//在我们的Body中放入这个处理的图片数据。
image.setContentID("bz.jpg");//给图片设置一个id,我们在后面可以使用!

// 准备正文数据。
MimeBodyPart text = new MimeBodyPart();
//这里的cid就是上面的哪个setContentID。
text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件", "text/html;charset=UTF-8");

// 描述数据关系。
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related");//设置MimeMultipart对象的相对熟悉为related,即发送的数据为文本+非附件资源。

//设置到消息中,保存修改。
message.setContent(mm);//把最后编辑好的邮件放到消息当中。
message.saveChanges();//保存上面的修改。

//发送包含图片的复杂邮件==========================================

6.包含附件的复杂邮件

//发送包含附件的复杂邮件=====================================================

/*
编写邮件内容
1.图片
2.附件
3.文本
 */

//图片
MimeBodyPart body1 = new MimeBodyPart();
body1.setDataHandler(new DataHandler(new FileDataSource("D:\\桌面\\大二上综测分\\志愿时.jpg")));
body1.setContentID("yhbxb.png"); //图片设置ID

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

//附件
MimeBodyPart body3 = new MimeBodyPart();
body3.setDataHandler(new DataHandler(new FileDataSource("D:\\桌面\\人文素养活动截图.zip")));
body3.setFileName("test.c"); //附件设置名字

MimeBodyPart body4 = new MimeBodyPart();
body4.setDataHandler(new DataHandler(new FileDataSource("D:\\桌面\\人文素养活动截图.zip")));
body4.setFileName("test.txt"); //附件设置名字

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

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

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

//设置到消息中,保存修改
message.setContent(allFile);//将MimeMultipart放入消息对象中。
message.saveChanges();//保存上面的修改。

//发送包含附件的复杂邮件=====================================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值