栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

邮件介绍和实现

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

邮件介绍和实现

9.邮件介绍和实现
  • 要在网络上实现邮件功能,得有专门的邮件服务器

  • 邮件服务器类似邮局,主要负责接收用户投递过来的邮件,并将器发送到接收者的电子邮箱中

  • SMTP服务器地址:smtp.xxx.com,163邮箱是smtp.163.com,qq邮箱是smtp.qq.com

  • 电子邮箱email地址需要在邮件服务器上申请,如qq邮箱要开通邮箱功能

  • 注册邮箱账号的过程是在邮件服务器上开辟空间的过程, 用户a(a@163.com)登录浏览器通过网络链接163服务器,在自己账号下创建一份邮件,发送到163服务器,163服务器通过收件人通过收件人的名称区分之后通过网络找到b(b@qq.com)所在的qq服务器,将邮件发送到qq服务器上b(b@qq.com)账号所在的空间中,此过程发邮件完成,qq服务器发送消息或弹窗给b,b登录服务器打开接收。

  • 发邮件三要素:收件人,主题,内容

  • Socket实现类似的功能了,就是一个线程循环监听和服务器临时存储消息。

  • 发送邮件:smtp协议

  • 接收邮件:pop3协议

9.1 传输协议
  • SMTP协议;发送邮件:通常把处理用户smtp请求(邮件发送请求)的服务器称为smtp服务器。
  • POP3协议;接受邮件;通常把处理用户pop3请求(邮件接收请求)的服务器称为pop3服务器。
  • 注意:信件地址正确,控制台也打印了正确信息,收件箱收不到,有可能是收件箱服务器拒收了你发的邮件,认为是广告,这时可能会在垃圾箱找到,也可能找不到。此时应该换收件箱测试
9.2 java邮件发送
  • 代码完成邮件发送。如:注册需要发送邮件进行账号激活,或oa项目中利用邮件进行任务提醒。

  • 需要准备javamail api和java activation framework即两个jar包

  • javamail :供java开发人员在程序中实现邮件发送和接受的标准开发包,支持常用的邮件协议POP3/IMAP/SMTP/MIME(附件,非文本格式)。使用此包编写邮件,无需考虑邮件实现的底层细节,只需要调用此包中的api即可。

  • 发送一封简单的邮件,保证电脑连接网络

    • 创建包含邮件服务器的网络链接信息的session对像
    • 创建代办邮件内容的message对象
    • 创建transport对象,链接服务器,发送message,关闭链接
  • 有4个核心类:

9.3 简单邮件
  • 发送邮件,需要协议支持,开启邮箱的pop3/SMTP协议
  • 用到邮箱服务授权码
@Test
public void sentSampleEmail() 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","smtp.qq.com");

    //关于qq邮箱,还要设置ssl加密,加上以下代码,其他邮箱不需要
    MailSSLSocketFactory msf = new MailSSLSocketFactory();
    msf.setTrustAllHosts(true);
    prop.put("mail.smtp.ssl.enable","true");
    prop.put("mail.smtp.ssl.socketFactory",msf);

    //使用javamail发送邮件5个步骤

    //1.创建定义整个应用所需的环境信息的session,用了监听器,qq才有
    Session session = Session.getDefaultInstance(prop, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("发送方账户@qq.com","邮箱设置开通pop3/smtp授权码");
        }
    });
    //开启session的Debug,可以看到发送email的运行状态
    session.setDebug(true);

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

    //3.使用邮箱用户名和授权码链上服务器
    transport.connect("smtp.qq.com","发送方账户@qq.com","邮箱设置开通pop3/smtp授权码");

    //4.创建邮件
    //创建邮件对象,用本次邮箱回话的session
    Message message = new MimeMessage(session);
    //指明邮件发送人
    message.setFrom(new InternetAddress("发送方账户@qq.com"));
    //指明邮件接受人
    message.setRecipient(Message.RecipientType.TO,new InternetAddress("接受方账户@163.com"));

    //设置邮件主题
    message.setSubject("简单邮件");
    //设置邮件内容,Multipart附件
    message.setContent("

简单邮件内容

","text/html;charset=utf-8"); //5.发送邮件 transport.sendMessage(message,message.getAllRecipients()); //5.关闭邮件 transport.close(); }
9.4 复杂邮件
  • MIME:多用途互联网邮件扩展协议

  • 发送邮件,需要协议支持,开启邮箱的pop3/SMTP协议

  • Multipart附件

  • javax.mail.internet.MimeBodyPart:表示是一个mime消息,和MimeMessage类是一样从Part接口继承过来的。(代表一个个的信件组成部分)

  • javax.mail.internet.MimeMultipart是抽象类Multipart的子类,用来组合多个mime消息,一个MimeMultipart对象可以包含多个代码mime消息的MimeBodyPart对象(将多个信件部分糅合成一个信件)

@Test
public void sendFileEmail() throws Exception {
    Properties prop = new Properties();
    //设置qq邮件服务器
    prop.setProperty("mail.host","smtp.qq.com");
    //邮件发生协议
    prop.setProperty("mail.transport.protocol","smtp");
    //需要验证用户名和密码
    prop.setProperty("mail.smtp.auth","smtp.qq.com");

    //关于qq邮箱,还要设置ssl加密,加上以下代码,其他邮箱不需要
    MailSSLSocketFactory msf = new MailSSLSocketFactory();
    msf.setTrustAllHosts(true);
    prop.put("mail.smtp.ssl.enable","true");
    prop.put("mail.smtp.ssl.socketFactory",msf);

    //使用javamail发送邮件5个步骤

    //1.创建定义整个应用所需的环境信息的session,用了监听器,qq才有
    Session session = Session.getDefaultInstance(prop, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("发送方账户@qq.com","邮箱设置开通pop3/smtp授权码");
        }
    });
    //开启session的Debug,可以看到发送email的运行状态
    session.setDebug(true);

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

    //3.使用邮箱用户名和授权码链上服务器
    transport.connect("smtp.qq.com","发送方账户@qq.com","邮箱设置开通pop3/smtp授权码");
    MimeMessage message = getMimeMessage(session);
    //5.发送邮件
    transport.sendMessage(message,message.getAllRecipients());

    //5.关闭邮件
    transport.close();

}

public static MimeMessage getMimeMessage(Session session) throws MessagingException {
    //4.创建邮件
    //创建邮件对象,用本次邮箱回话的session
    MimeMessage message = new MimeMessage(session);
    //指明邮件发送人
    message.setFrom(new InternetAddress("发送方账户@qq.com"));
    //指明邮件接受人
    message.setRecipient(Message.RecipientType.TO,new InternetAddress("接收方账户@163.com"));

    //设置邮件主题
    message.setSubject("简单邮件");
    //设置邮件内容,Multipart附件
    //message.setContent("

简单邮件内容

","text/html;charset=utf-8"); //复杂邮件内容 //图片数据 MimeBodyPart image = new MimeBodyPart(); //图片需要经过数据处理,二进制到图片,DataHandler DataHandler imageDH = new DataHandler(new FileDataSource("src/main/resources/dec.jpg")); //在消息体中加入图片 image.setDataHandler(imageDH); //给图片设置id,后续可以使用 image.setContentID("dec.jpg"); //正文数据:文本 MimeBodyPart content = new MimeBodyPart(); //cid:图片被使用 content.setContent("

这是一封带n图片的信件

","text/html;charset=utf-8"); //附件 MimeBodyPart filecontent = new MimeBodyPart(); DataHandler propDH = new DataHandler(new FileDataSource("src/main/resources/log4j.properties")); filecontent.setDataHandler(propDH); filecontent.setFileName("log4j.properties"); //描述数据关系 MimeMultipart mimeMultipart = new MimeMultipart(); mimeMultipart.addBodyPart(image); mimeMultipart.addBodyPart(content); mimeMultipart.addBodyPart(filecontent); mimeMultipart.setSubType("mixed"); //设置到消息中,保存更改 message.setContent(mimeMultipart); message.saveChanges(); return message; }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号