• 发送邮件


    1、发送邮件过程

    2、SMTP发邮件协议的命令

    SMTP命令及格式

    说     明

    Ehlo<SP><domain><CRLF>

    ehlo命令是SMTP邮件发送程序与SMTP邮件接收程序建立连接后必须发送的第一条SMTP命令,参数<domain>表示SMTP邮件发送者的主机名。ehlo命令用于替代传统SMTP协议中的helo命令。

    Auth<SP>Login<CRLF>

    如果SMTP邮件接收程序需要SMTP邮件发送程序进行认证时,它会向SMTP邮件发送程序提示它所采用的认证方式,SMTP邮件发送程序接着应该使用这个命令回应SMTP邮件接收程序,参数<para>表示回应的认证方式,通常是SMTP邮件接收程序先前提示的认证方式。

    Mail<SP>From:<reverse-path><CRLF>

    此命令用于指定邮件发送者的邮箱地址,参数<reverse-path>表示发件人的邮箱地址。

    Rcpt<SP>To:<forword-path><CRLF>

    此命令用于指定邮件接收者的邮箱地址,参数<forward-path>表示接收者的邮箱地址。如果邮件要发送给多个接收者,那么应使用多条Rcpt<SP>To命令来分别指定每一个接收者的邮箱地址。

    Data<CRLF>

    此命令用于表示SMTP邮件发送程序准备开始传送邮件内容,在这个命令后面发送的所有数据都将被当作邮件内容,直至遇到“<CRLF>.<CRLF>”标识符,则表示邮件内容结束。

    Quit<CRLF>

    此命令表示要结束邮件发送过程,SMTP邮件接收程序接收到此命令后,将关闭与SMTP邮件发送程序的网络连接。

    3、POP3协议的命令

    命令及其使用格式

    说    明

    user<SP>username<CRLF>

    user命令是POP3客户端程序与POP3邮件服务器建立连接后通常发送的第一条命令,参数username表示收件人的帐户名称。

    pass<SP>password<CRLF>

    pass命令是在user命令成功通过后,POP3客户端程序接着发送的命令,它用于传递帐户的密码,参数password表示帐户的密码。

    stat<CRLF>

    stat命令用于查询邮箱中的统计信息,例如,邮箱中有邮件数和邮件占用的字节大小等。

    list<SP>[msg#]<CRLF>

    list命令用于列出邮箱中的邮件信息,参数msg#是一个可选参数,表示邮件的序号。当不指定参数时,POP3服务器列出邮箱中所有的邮件信息;当指定参数msg#时,POP3服务器只返回该序号对应的邮件的信息。

    retr<SP>msg#<CRLF>

    list命令用于获取某封邮件的内容,参数msg#表示邮件的序号。

    dele<SP>msg#<CRLF>

    dele命令用于在某封邮件上设置删除标记,参数msg#表示邮件的序号。POP3服务器执行dele命令时,只是为邮件设置了删除标记,并没有真正把邮件删除掉,只有POP3客户端程序发出quit命令后,POP3服务器才会真正删除所有设置了删除标记的邮件。

    rset<CRLF>

    rset命令用于清除所有邮件的删除标记。

    noop<CRLF>

    noop命令用于检测POP3客户端与POP3服务器的连接情况。

    quit<CRLF>

    quit命令表示要结束邮件接收过程,POP3服务器接收到此命令后,将删除所有设置了删除标记的邮件,并关闭与POP3客户端程序的网络连接。

    4、发送邮件Demo

     1 //1、声明Properties对象,用于放信息
     2         Properties pro=new Properties();
     3         pro.setProperty("mail.host", "smtp.qq.com");//要连接的服务器主机
     4         pro.setProperty("mail.smtp.auth", "true");//设置验证
     5         //2、声明用户名和密码
     6         Authenticator auth=new Authenticator() {
     7             @Override
     8             protected PasswordAuthentication getPasswordAuthentication() {
     9                 PasswordAuthentication pa=new PasswordAuthentication("邮箱名", "邮箱密码");
    10                 return pa;
    11             }            
    12         };
    13         
    14         //3、获取session
    15         Session session=Session.getDefaultInstance(pro,auth);
    16         session.setDebug(true);//打印信息用
    17         //4、声明信息
    18         MimeMessage message=new MimeMessage(session);
    19         //5、设置发件人
    20         Address from=new InternetAddress("邮箱名@qq.com");//必须与上面声明的用户名和密码一致--如果想不一致出现发邮件可以通过命令行进行发送
    21         message.setFrom(from);
    22         //6、设置收件人【收件是必须的】
    23         message.setRecipient(RecipientType.TO, new InternetAddress("邮箱名1@126.com"));//收件
    24         //message.setRecipient(RecipientType.CC, new InternetAddress("邮箱名2@qq.com"));//抄送
    25         //message.setRecipient(RecipientType.BCC, new InternetAddress("邮箱名3@qq.com"));//暗送
    26         //7、设置主题及邮件内容
    27         message.setSubject("测试邮件222");//主题
    28         
    29         //邮件内容(test/plan),如果需要超链接等设置参数为text/html
    30         message.setContent("123456789asdfghjkl;'/.,mnbvcx0-去玩儿体育IOPasdfghjkl自行车,。、<a href='http://www.baidu.com'>百度<a>","text/html;charset=utf-8");
    31         
    32         //8、发送
    33         Transport.send(message);

    带附件的邮件

     1 //1、声明容器
     2         Properties pro=new Properties();
     3         pro.setProperty("mail.host", "smtp.126.com");
     4         pro.setProperty("mail.smtp.auth", "true");
     5         //2、声明用户名和密码
     6         Authenticator auth=new Authenticator() {
     7             @Override
     8             protected PasswordAuthentication getPasswordAuthentication() {
     9                 PasswordAuthentication pa=new PasswordAuthentication("邮箱名", "密码");
    10                 return pa;
    11             }
    12             
    13         };
    14         
    15         //3、获取session
    16         Session session=Session.getDefaultInstance(pro, auth);
    17         session.setDebug(true);
    18         //4、设置信息
    19         MimeMessage message=new MimeMessage(session);
    20         message.setFrom(new InternetAddress("邮箱@126.com"));
    21         message.setRecipient(RecipientType.TO, new InternetAddress("邮箱@qq.com"));
    22         message.setSubject("带附件测试邮件");
    23         
    24         //1声明多处理的part
    25         MimeMultipart mm=new MimeMultipart();
    26         //2、声明
    27         MimeBodyPart part1=new MimeBodyPart();
    28         //3、设置附件
    29         DataSource ds=new FileDataSource(new File("./img/1.jpg"));
    30         DataHandler dh=new DataHandler(ds);
    31         part1.setDataHandler(dh);
    32         part1.setFileName(MimeUtility.encodeText("图片1.jpg"));//设置附件名--必须
    33         
    34         mm.addBodyPart(part1);
    35         
    36         message.setContent(mm);
    37         
    38         Transport.send(message);
  • 相关阅读:
    百度面试题:把数组排成最小的数
    面试题:在O(1)时间删除链表结点
    从第一字符串中删除第二个字符串中所有的字符
    在一个字符串中找到第一个只出现一次的字符
    大整数运算
    输出1到最大的N位数
    删除字符串中的数字并压缩字符串
    排列 或组合问题的解法(包含回溯法)
    卡特兰数(Catalan)简介
    编程之美-分层遍历二叉树
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4143968.html
Copyright © 2020-2023  润新知