JavaMail登录163发送QQ邮箱

邮件协议

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() {
            @Override
            protected 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");//设置是否进行身份验证,必须为true

        Authenticator authenticator=new Authenticator() {
            @Override
            protected 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("发送成功!!!");
    }
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值