邮件协议

1.收发邮件
发邮件大家都会吧!发邮件是从客户端把邮件发送到邮件服务器,收邮件是把邮件服务器的邮件下载到客户端。

我们在163、126、QQ、sohu、sina等网站注册的Email账户,其实就是在邮件服务器中注册的。这些网站都有自己的邮件服务器。

2.邮件协议概述
与HTTP协议相同,收发邮件也是需要有传输协议的。

  • SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议;
  • POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议;
  • IMAP:(Internet Message Access Protocol,因特网消息访问协议)收发邮件协议。

3.理解邮件收发过程

  • 其实你可以把邮件服务器理解为邮局!如果你需要给朋友寄一封信,那么你需要把信放到邮筒中,这样你的信会“自动”到达邮局,邮局会把信邮到另一个省市的邮局中。然后这封信会被送到收信人的邮箱中。最终收信人需要自己经常查看邮箱是否有新的信件。
  • 其实每个邮件服务器都由SMTP服务器和POP3服务器构成,其中SMTP服务器负责发邮件的请求,而POP3负责收邮件的请求。

当然,有时我们也会使用163的账号,向126的账号发送邮件。这时邮件是发送到126的邮件服务器,而对于163的邮件服务器是不会存储这封邮件的。

4.邮件服务器名称

smtp服务器的端口号为25,服务器名称为smtp.xxx.xxx。
pop3服务器的端口号为110,服务器名称为pop3.xxx.xxx。

例如:

  • 163:smtp.163.com和pop3.163.com;
  • 126:smtp.126.com和pop3.126.com;
  • qq:smtp.qq.com和pop3.qq.com;
  • sohu:smtp.sohu.com和pop3.sohu.com;
  • sina:smtp.sina.com和pop3.sina.com。

JavaMail

1.JavaMail概述

JavaMail是由SUN公司提供的专门针对邮件的API,主要Jar包:mail.jar、activation.jar。
在使用MyEclipse创建web项目时,需要小心!如果只是在web项目中使用java mail是没有什么问题的,发布到Tomcat上运行一点问题都没有!
但是如果是在web项目中写测试那就出问题了。
在MyEclipse中,会自动给web项目导入javax.mail包中的类,但是不全(其实是只有接口,而没有接口的实现类),所以只靠MyEclipse中的类是不能运行java mail项目的,但是如果这时你再去自行导入mail.jar时,就会出现冲突。
处理方案:到下面路径中找到javaee.jar文件,把javax.mail删除!!!
D:\ProgramFiles\MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5

2.JavaMail中主要类

java mail中主要类:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。
Session:表示会话,即客户端与邮件服务器之间的会话!想获得会话需要给出账户和密码,当然还要给出服务器名称。在邮件服务中的Session对象,就相当于连接数据库时的Connection对象。
MimeMessage:表示邮件类,它是Message的子类。它包含邮件的主题(标题)、内容,收件人地址、发件人地址,还可以设置抄送和暗送,甚至还可以设置附件。
Transport:用来发送邮件。它是发送器!

3.JavaMail之Hello World

在使用telnet发邮件时,还需要自己来处理Base64编码的问题,但使用JavaMail就不必理会这些问题了,都由JavaMail来处理。

第一步:获得Session
Session session = Session.getInstance(Properties prop, Authenticator auth);
其中prop需要指定两个键值,一个是指定服务器主机名,另一个是指定是否需要认证!我们当然需要认证!
Properties prop = new Properties();
prop.setProperty(“mail.host”, “smtp.163.com”);//设置服务器主机名
prop.setProperty(“mail.smtp.auth”, “true”);//设置需要认证

其中Authenticator是一个接口表示认证器,即校验客户端的身份。我们需要自己来实现这个接口,实现这个接口需要使用账户和密码。
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication () {
new PasswordAuthentication(“itcast_cxf”, “itcast”);//用户名和密码
}
};
通过上面的准备,现在可以获取得Session对象了:
Session session = Session.getInstance(prop, auth);

第二步:创建MimeMessage对象
创建MimeMessage需要使用Session对象来创建:
MimeMessage msg = new MimeMessage(session);
然后需要设置发信人地址、收信人地址、主题,以及邮件正文。
msg.setFrom(new InternetAddress(“itcast_cxf@163.com”));//设置发信人
msg.addRecipients(RecipientType.TO, “itcast_cxf@qq.com,itcast_cxf@sina.com”);//设置多个收信人
msg.addRecipients(RecipientType.CC, “itcast_cxf@sohu.com,itcast_cxf@126.com”);//设置多个抄送
msg.addRecipients(RecipientType.BCC, ”itcast_cxf@hotmail.com”);//设置暗送
msg.setSubject(“这是一封测试邮件”);//设置主题(标题)
msg.setContent(“当然是hello world!”, “text/plain;charset=utf-8”);//设置正文

第三步:发送邮件
Transport.send(msg);//发送邮件

4.JavaMail发送带有附件的邮件(了解)
一封邮件可以包含正文(只有一个)、附件N个,所以正文与N个附件都是邮件的一个部份。
上面的hello world案例中,只是发送了带有正文的邮件!所以在调用setContent()方法时直接设置了正文,如果想发送带有附件邮件,那么需要设置邮件的内容为MimeMultiPart。
MimeMulitpart parts = new MimeMulitpart();//多部件对象,可以理解为是部件的集合
msg.setContent(parts);//设置邮件的内容为多部件内容。
然后我们需要把正文、N个附件创建为“主体部件”对象(MimeBodyPart),添加到MimeMuiltPart中即可。
MimeBodyPart part1 = new MimeBodyPart();//创建一个部件
part1.setCotnent(“这是正文部分”, “text/html;charset=utf-8”);//给部件设置内容
parts.addBodyPart(part1);//把部件添加到部件集中。

下面我们创建一个附件:
MimeBodyPart part2 = new MimeBodyPart();//创建一个部件
part2.attachFile(“F:\a.jpg”);//设置附件
part2.setFileName(“hello.jpg”);//设置附件名称,可以不设置也会有名称,但是如果名称中有中文就必须设置,因为要解决乱码。通过MimeUitlity.encodeText(String)
parts.addBodyPart(part2);//把附件添加到部件集中

注意,如果在设置文件名称时,文件名称中包含了中文的话,那么需要使用MimeUitlity类来给中文编码:
part2.setFileName(MimeUitlity.encodeText(“美女.jpg”));

/** 1. 得到session*/Properties props = new Properties();props.setProperty("mail.host", "smtp.163.com");props.setProperty("mail.smtp.auth", "true");Authenticator auth = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("itcast_cxf", "itcast");}};Session session = Session.getInstance(props, auth);/** 2. 创建MimeMessage*/MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//设置发件人msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//设置收件人msg.setRecipients(RecipientType.CC, "itcast_cxf@sohu.com");//设置抄送msg.setRecipients(RecipientType.BCC, "itcast_cxf@sina.com");//设置暗送msg.setSubject("这是来自ITCAST的测试邮件");msg.setContent("这就是一封垃圾邮件!", "text/html;charset=utf-8");/** 3. 发*/Transport.send(msg);

或者

public static void main(String[] args) throws MessagingException, IOException {Properties properties=new Properties();properties.setProperty("mail.host", "smtp.163.com");//设置服务器主机properties.setProperty("mail.smtp.auth", "true");//设置是否进行身份验证,必须为trueAuthenticator authenticator=new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("18382949073@163.com", "你的第三方登录授权码");//发件人的用户名和第三方登录授权码}};Session session=Session.getInstance(properties, authenticator);//创建连接会话MimeMessage message=new MimeMessage(session);//创建消息MimeMultipart mimeMultipart=new MimeMultipart();//创建多条消息内容容器MimeBodyPart part01=new MimeBodyPart();//创建内容part01.setContent("欢迎进入北斗狼神的世界,这里是狼神的主页 www.domarvel.cn", "text/html;charset=utf-8");MimeBodyPart part02=new MimeBodyPart();part02.attachFile(new File("S:/任务/FireLang.jpg"));//创建附件part02.setFileName(MimeUtility.encodeText("胡艺宝.jpg"));MimeBodyPart part03=new MimeBodyPart();part03.setContent("FIRELANG---HUYIBAO", "text/html;charset=utf-8");//因为已经设置了邮件主体,所以这一个信息是不会看到的。但是会发到服务器。mimeMultipart.addBodyPart(part01);//添加内容到容器mimeMultipart.addBodyPart(part02);mimeMultipart.addBodyPart(part03);message.setContent(mimeMultipart);//把多条消息装进要发送消息里面message.setSubject("FireLang官方邮件");//设置邮件标题message.setFrom(new InternetAddress("18382949073@163.com"));//设置发件人message.setRecipients(RecipientType.BCC, "1428384239@qq.com");//设置收件人,并且发送方式为密送,BBC密送,CC抄送,TO正常发送,多个收件人用逗号隔开,在收件人字符串里面Transport.send(message);//发送邮件System.out.println("发送成功!!!");}

JavaMail登录163发送QQ邮箱相关推荐

  1. 登录系统-发送QQ邮箱验证码(2)

    在网上找了很久的QT基于smtp的发送邮件,最后找到了一个别人写的,可以用.下面是链接: https://download.csdn.net/download/weixin_39566101/1063 ...

  2. Spring Boot 整合163或者qq邮箱发送验证码

    前记 最近做的项目中注册功能要用到验证码,本来想用阿里云的短信服务,但是有点小贵,就另辟捷径,选择了用邮箱来发送验证码.记录一下整合过程,也希望能帮助一些有需要的人. 正文 1.Spring Boot ...

  3. php使用qq发邮件怎么发,php 发送QQ邮箱邮件

    这是我的源码比较简陋 https://www.lanzous.com/i2l7h8f 感谢 https://www.cnblogs.com/woider/p/6980456.html 下载phpmai ...

  4. linux 发送邮件到163或者QQ邮箱

                                                               linux 发送邮件到163或者QQ邮箱 我想,在开始发送邮件前有些概念需要理解, ...

  5. php - 发送qq邮箱信息

    有时候我们在网站上看见别的网站通过QQ邮箱完成实名认证是如何实现的呢?查了很多资料,终于找到啦. 互不多说,直接上代码. 可以直接用哦,记得复制和粘贴. 运行index.php <?php re ...

  6. C# WinForm 使用SMTP协议发送QQ邮箱验证码

    文章目录 前言 功能实现步骤 一.获取QQ邮箱授权码 二.功能界面 三.创建发送邮箱验证码的类 四.在From1中调用类中的函数,实现功能 前言   在程序设计中,发送验证码是常见的一个功能,用户在注 ...

  7. SpringBoot实现发送QQ邮箱验证码

    SpringBoot实现发送QQ邮箱验证码 打开qq邮箱官网 点击设置 找到开启服务:POP3/SMTP 然后复制给的密授权码(记住) 导入maven依赖坐标 <!--qq邮箱--> &l ...

  8. Java使用163和QQ邮箱发邮件

    "细雨梦回鸡塞远,小楼吹彻玉笙寒" 序 现在做的项目有做到流程审批,到下一节点时,会给节点的负责人发送邮件通知.流程都是手写的代码,没有用到流程引擎. 正文 其实通过QQ邮箱或者1 ...

  9. 163、QQ邮箱收不到Github的邮件解决方法

    163.QQ邮箱收不到Github的邮件解决方法 20230505171221||300

最新文章

  1. Ubuntu 14.04安装openProj
  2. 手摸手教你使用vue-cli脚手架-详细步骤图文解析[vue入门]
  3. MappedByteBuffer的使用
  4. 操作系统真实的虚拟内存是什么样的
  5. 计算机专业创新项目,计算机专业本科生的创新思维
  6. [官版翻译ing]OpenStack云计算快速入门之一:OpenStack及其构成简介
  7. ARCH与GARCH模型
  8. 处女座的期末复习-贪心
  9. Nachos Lab2 虚拟内存
  10. 不确定性推理——主观贝叶斯方法matlab实现
  11. 网页无插件播放RTSP流媒体
  12. 分糖果系列一(DP+暴力)
  13. hololens2 通信 之 Windows.Networking.Sockets
  14. 【背包DP】【2018.9.20普及组模拟】T3(WOJ 3975)保护羊村
  15. PHP编写投屏功能,win10如何投屏到电视
  16. python编程midi键盘按键错乱_电脑键盘按键错乱怎么回事?几步轻松搞定
  17. 移动APP卡顿问题解决实践
  18. oracle查看服务器的时间,Oracle如何获取系统当前时间等操作实例
  19. 网络爬虫全解析(JAVA)--目录
  20. 九鼎Study210嵌入式开发板刷机笔记

热门文章

  1. grep 正则表达式搜索
  2. “撸妹”继续不换壳刷下限?诺基亚Lumia 1001概念机
  3. 迷你世界电路计算机的过程,迷你世界循环电路制作教程文字版
  4. 触动精灵: 零基础小白学触动1-4
  5. Cyberbit:某国际机场一半以上工作站都已被挖矿软件占领
  6. 评测 ROG魔霸新锐2022值得入手吗
  7. Stable Diffusion安装教程、model导入教程以及精品promt指令
  8. Curl cookie设置
  9. 卢氏黎明计算机学校,卢氏老井
  10. hive解绑邮箱_荣耀战棋如何注册HiVE账号 荣耀战棋打不开登陆不了怎么办