JavaEE——Java和DOS下收发邮件(SMTP和POP3协议)、E-Mail协议)

本文介绍了电子邮件系统的两大核心协议——SMTP和POP3/IMAP的工作原理及应用实例。详细阐述了如何利用这些协议进行邮件的发送与接收,并提供了Java环境下实现的具体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

E-Mail协议简介:

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

这里写图片描述

邮件收/发协议:

  • SMTP协议-发邮件协议

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

  • POP3协议-收邮件协议

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

  • IMAP协议-对POP3的扩展

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

SMTP发邮件协议的命令

这里写图片描述

POP3协议的命令

这里写图片描述

DOS下演示收发邮件

注意在邮箱服务器(进网站邮箱)中要把SMTP和POP3服务的开关打开

邮箱:
hncujava@sina.com   1234567
hncujava@126.com    hncu1234567

 编码
package cn.hncu;

import sun.misc.BASE64Encoder;

public class BaseEncoder {
    public static void main(String[] args) {
        BASE64Encoder be=new BASE64Encoder();
        String name=be.encode("hncujava".getBytes());
        String pwd=be.encode("1234567".getBytes());
        System.out.println(name);
        System.out.println(pwd);

    }
}

※※win7系统中,默认下 telnet服务是关闭,得用如下方式:
1、控制面板-->程序-->打开或关闭windows功能,选择“telnet服务器” 和 “telnet客户端”,确定即可。
2、控制面板-->系统安全-->管理工具-->服务-->telnet-->右击“属性”-->将“禁用”改为“手动”,再选择“启动”

一、发邮件
telnet smtp.sina.com 25  第一步:与服务器建立连接。
ehlo hncu               第二步:先和服务器打个招乎
auth login              第三步:请求登录
aG5jdWphdmE=            输入用户名经过base64编码以后的
MTIzNDU2Nw==            输入密码,也是经过base64编码以后的。
mail from:<hncujava@sina.com>    第四步:输入发件人
rcpt to:<hncujava@126.com>          第五步:输入收件人
data                            第六步:输入data命令然后回车,开始输入数据。
from:<hncujava@sina.com>            可选的输入from:<…>
to:<hncujava@126.com>        可选的输入to:<..>
subject:hncu mail wyjtest       subject:主题
[空行]
hello hncu , iam OK?! 
. //邮件结束符            第七步:输入.(点)单行,表示数据结束
                            第八步:输入quit退出。

二、收邮件
telnet pop3.126.com 110
user hncujava
pass hncu1234567
stat 显示总体信息。
list 列出所有信件
retr - 显示第一封信件
quit -退出

下面是演示java下操作发邮件

注意:QQ邮箱需要在设置中开启smtp和pop3协议,并且记住授权码。
比其他邮箱多了ssl协议,需要加上

//要加上SSL
            MailSSLSocketFactory sf=new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            p.setProperty("mail.smtp.ssl.enable", "true");
            p.put("mail.smtp.ssl.socketFactory", sf);

下面是发送代码

这里写代码片
package cn.hncu;
import java.security.GeneralSecurityException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.junit.Test;
import org.junit.Test;

import com.sun.mail.util.MailSSLSocketFactory;

public class SendMailDemo {
    @Test
    public void send1() throws AddressException, MessagingException, GeneralSecurityException{
        Properties p=new Properties();
        p.setProperty("mail.host", "smtp.sina.com");//指定邮件服务器,默认端口 25
        p.setProperty("mail.smtp.auth", "true");//要采用指定用户名密码的方式去认证

//      MailSSLSocketFactory sf=new MailSSLSocketFactory();
//      sf.setTrustAllHosts(true);
//      p.put("mail.smtp.ssl.enable", "true");
//      p.put("mail.smtp.ssl.socketFactory", sf);
//      
        Session s=Session.getDefaultInstance(p, new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa=new PasswordAuthentication("hncujava", "1234567");
                return pa;
            }
        });//注册session,指定发送账号

        s.setDebug(true);//设置打开调试状态,一一条条发送.
         //声明一个Message对象(代表一封邮件),从session中创建
        MimeMessage msg=new MimeMessage(s);
         //邮件信息封装
        //1发件人
         msg.setFrom( new InternetAddress("hncujava@sina.com") );
        //2收件人
        msg.setRecipient(RecipientType.TO, new InternetAddress("hncujava@126.com"));
        //33邮件内容:主题、内容
        msg.setSubject("这是军街用java发邮件");
        msg.setContent("<a href='http://www.3300av.com/'>这是军街的个人主页</a>","text/html;charset=utf-8");
//      msg.setContent("今天天气很好啊","text/plain;charset=utf-8");
        //发送动作
        Transport.send(msg);
    }
    @Test//发送带附件的邮件
    public void send2() throws MessagingException{
        //跟smtp服务器建立一个连接
        Properties p=new Properties();
        p.setProperty("mail.host", "smtp.sina.com");
        p.setProperty("mail.smtp.auth", "true");
        Session s=Session.getDefaultInstance(p, new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa=new PasswordAuthentication("hncujava", "1234567");
                return pa;
            }
        });
        s.setDebug(true);
        MimeMessage msg=new MimeMessage(s);
        //声明一个Message对象(代表一封邮件),从session中创建
        msg.setFrom(new InternetAddress("hncujava@sina.com"));
        InternetAddress[] ia= new InternetAddress[2];
        ia[0]=new InternetAddress("hncujava@126.com");
        ia[1]=new InternetAddress("747205398@qq.com");
        msg.setRecipients(javax.mail.Message.RecipientType.TO, ia );
        msg.setSubject("这是我用Java发来的邮件5....");
        msg.setSubject("这是军街用来测试邮件附件");

        MimeBodyPart body1=new MimeBodyPart();
        body1.setContent("这是两张<font color='red'>美女图片</font>....","text/html;charset=utf-8");        
        //邮件内容部分2---附件1
        MimeBodyPart body2=new MimeBodyPart();
        body2.setDataHandler(new DataHandler(new FileDataSource("./imgs/1.png")));
        body2.setFileName("1.jpg");

//      2-1606200U946.doc
        //邮件内容部分3---附件2
        MimeBodyPart body3=new MimeBodyPart();
        body3.setDataHandler(new DataHandler(new FileDataSource("./imgs/2-1606200U946.doc")));
        body3.setFileName("2-1606200U946.doc");
        //把上面的3部分组装在一起,设置到msg中
        MimeMultipart mm=new MimeMultipart();
        mm.addBodyPart(body1);
        mm.addBodyPart(body2);
        mm.addBodyPart(body3);
        msg.setContent(mm);

        Transport.send(msg);
    }

    @Test
    public void my() throws AddressException, MessagingException, GeneralSecurityException{
        for (int i = 0; i < 50; i++) {
            Properties p=new Properties();
            p.setProperty("mail.host", "smtp.qq.com");//指定邮件服务器,默认端口 25
            p.setProperty("mail.smtp.auth", "true");//要采用指定用户名密码的方式去认证
            //要加上SSL
            MailSSLSocketFactory sf=new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            p.setProperty("mail.smtp.ssl.enable", "true");
            p.put("mail.smtp.ssl.socketFactory", sf);
            Session s = Session.getDefaultInstance(p, new Authenticator() {

                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    PasswordAuthentication pa = new PasswordAuthentication(
                            "747205398", "************");//***为你的qq邮箱登陆授权码
                    return pa;
                }
            });//注册session,指定发送账号
            s.setDebug(true);//设置打开调试状态,一一条条发送.
            //声明一个Message对象(代表一封邮件),从session中创建
            MimeMessage msg = new MimeMessage(s);
            //邮件信息封装
            //1发件人
            msg.setFrom(new InternetAddress("747205398@qq.com"));
            //2收件人
            msg.setRecipient(RecipientType.TO, new InternetAddress(
                    "782458789@qq.com"));
            //33邮件内容:主题、内容
            msg.setSubject("狗屎,我给你发给黄色网址,不要写");
            msg.setContent("<a href='http://www.3300av.com/'>你看看</a>",
                    "text/html;charset=utf-8");
            //      msg.setContent("今天天气很好啊","text/plain;charset=utf-8");
            //发送动作
            Transport.send(msg);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值