【JavaMail】(1)JavaMail简介,通过命令行、Java发邮件

一、E-Mail协议简介

1、邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器 和 接收邮件的服务器。
2、发送邮件的服务器使用发送协议,现在常用的是SMTP协议。所以,通常发邮件的服务器也称为SMTP服务器。
3、接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3或IMAP服务器。
4、目前经常见到的服务器为SMTP和POP3服务器。如大家在注册了126的邮箱之后,它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)。
5、当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。默认发邮件服务器的端口为25,收邮件的端口为110.

邮件发送的工作图:

这里写图片描述

二、邮件收/发协议

1、SMTP协议-发邮件协议:

全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。端口一般为25.

2、POP3协议-收邮件协议

全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。端口一般为110.

3、IMAP协议-对POP3的扩展

全称为Internet Message Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。

三、SMTP发邮件协议的命令

这里写图片描述

四、POP3协议的命令

这里写图片描述

五、通过命令行发送邮件的步骤如下

※发邮件

telnet smtp.sina.com 25
ehlo hncu
auth login
aG5jdWphdmE=
aG5jdTEyMzQ1Njc=
mail from:hncujava@sina.com
rcpt to:hncujava@126.com
data
from:hncujava@sina.com
to:hncujava@126.com
subject:hncu mail test
[空行]
hello hncu, are you OK?!
. //邮件结束符

六、通过命令行接收邮件的步骤如下

※收邮件(sina成功)
telnet pop3.sina.com 110
user hncujava
pass hncu*****7
stat //显示总体信息
list //列出所有信件
retr n //收取序号为n的邮件
quit

七、通过Java发邮件

1、利用sun.misc.BASE64Encoder类编码用户名和密码:

package cn.hncu.base64;

import sun.misc.BASE64Encoder;

public class Base64EncoderDemo {
    public static void main(String[] args) {
        String name= "hncujava";
        String pwd = "hncu1234567";
        BASE64Encoder en = new  BASE64Encoder();
        name = en.encode(name.getBytes());
        pwd = en.encode(pwd.getBytes());
        System.out.println("name : "+name+"\npwd : "+pwd);
    }
}
/*结果:
    name : aG5jdWphdmE=
    pwd : aG5jdTEyMzQ1Njc=
*/

2、如果sun.misc.BASE64Encoder找不到,请这样做:

这里写图片描述

3、用Java代码发送邮件:

@Test //发送: 纯文本内容的邮件
public void send1() throws Exception{
    Properties p = new Properties();
    p.setProperty("mail.host", "smtp.sina.com");
    p.setProperty("mail.smtp.auth", "true");//认证登录
    Session session = Session.getDefaultInstance(p, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("hncujava","hncu1*****7");
        }
    });

    session.setDebug(true);//以debug方式(应答方式)进行通讯

    //准备邮件
    MimeMessage msg = new MimeMessage(session); //从session中创建邮件
    msg.setFrom( new InternetAddress("hncujava@sina.com") );
    msg.setRecipient(RecipientType.TO, new InternetAddress("hncujava@126.com"));
    msg.setSubject("邮件的主题OKOK!");
    msg.setContent("这是第一次用Java发邮件,请多多关照....", "text/plain;charset=utf-8"); //纯文本格式的内容
    //msg.setContent("这是第一次用<a href='http://www.baidu.com?age=20'>Java发邮件</a>,请多多关照....", "text/html;charset=utf-8"); //html格式的内容

    //发送邮件
    Transport.send(msg);
}

4、用Java发送带有附件的邮件:

@Test //发送:文本内容+附件
public void send2() throws Exception{
    Properties p = new Properties();
    p.setProperty("mail.host", "smtp.sina.com");
    p.setProperty("mail.smtp.auth", "true");//认证登录
    Session session = Session.getDefaultInstance(p, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("hncujava","hncu*****7");
        }
    });

    session.setDebug(true);//以debug方式(应答方式)进行通讯

    //准备邮件
    MimeMessage msg = new MimeMessage(session); //从session中创建邮件
    msg.setFrom( new InternetAddress("hncujava@sina.com") );
    msg.setRecipient(RecipientType.TO, new InternetAddress("hncujava@126.com"));
    msg.setSubject("邮件的主题OKOK!");

    //body1:邮件正文文本内容
    MimeBodyPart body1 = new MimeBodyPart();
    body1.setContent("这是第一次用<a href='http://www.baidu.com?age=20'>Java发邮件</a>,请多多关照....", "text/html;charset=utf-8"); //html格式的内容

    //body2:附件1
    MimeBodyPart body2 = new MimeBodyPart();
    body2.setDataHandler( new DataHandler( new FileDataSource("./img/a.jpg")));
    body2.setFileName( MimeUtility.encodeText("美女1.jpg")); //能够支持中文的附件文件名设置

    //body3:附件2
    MimeBodyPart body3 = new MimeBodyPart();
    body3.setDataHandler( new DataHandler( new FileDataSource("./img/b.jpg")));
    body3.setFileName( MimeUtility.encodeText("美女2.jpg")); //不采用编码方式则文件名会中文乱码

    MimeMultipart multipart = new MimeMultipart();
    multipart.addBodyPart(body1);
    multipart.addBodyPart(body2);
    multipart.addBodyPart(body3);

    msg.setContent(multipart);

    //发送邮件
    Transport.send(msg);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值