(邮件/用户)代理协议简介Socket程序发送电子邮件
目录
邮件收发
基本流程
具体过程
协议简介
SMTP
POP3
IMAP
MIME
在.NET中如何实现
常用的邮件服务器地址:
126邮箱
163邮箱
yahoo邮箱
Sohu邮箱
Gmail邮箱
QQ邮箱
可能会遇到的问题
配置用户代理
编写Socket程序发送电子邮件
邮件收发
基本流程
具体过程
1.发信人在用户代理上编辑邮件,并写清楚收件人的邮箱地址;
2.用户代理根据发信人编辑的信息,生成—封符合邮件格式的邮件;
3.用户代理把邮件发送到发信人的的邮件服务器上,邮件服务器上面有一个缓冲队列,发送到邮件服务器上面的邮件都会加入到缓冲队列中,等待邮件服务器上的SMTP客户端进行发送;
4.发信人的邮件服务器使用SMTP协议把这封邮件发送到收件人的邮件服务器上(它会自动根据收件人的邮箱来分析出收件人的邮箱服务器);
5.收件人的邮件服务器收到邮件后,把这封邮件放到收件人在这个服务器上的信箱中;
6.收件人使用用户代理来收取邮件。首先用户代理使用POP3协议来连接收件人所在的邮件服务器,身份验证成功后,用户代理就可以把邮件服务器上面的收件人邮箱里面的邮件读取出来,并展示给收件人。
下面以—个简短的例子来说明这个过程:
比如Tom要给Lucy发一封邮件,邀请她明天晚上一起看电脑。首先TOM会打开OutLook (用户代理),第一次使用用户代理时,需要进行相关的配置,详细的配置过程见后面的例子。我们先假设Tom已经配置好用户代理.Tom打开OutLook后,首先会填写收件人的邮箱,然后是邮件的主题以及邮件的内容,写好之后,点击发送。OutLook就会把这封邮件发送到Tom邮箱的服务器上面(比如Tom申请的是Gmail邮箱,那么这封邮件就会发送到Gmail的邮件服务器上面,这个邮件服务器的地址一般会由邮件服务商给出,在第一次配置OutLook时,就需要填写这个地址)。Tom邮箱服务器上面的SMTP客户端就根据收件人的地址,找到收件人所在的邮箱服务器,然后与收件人邮件服务器上面的SMTP端建立一个TCP连接,经过三次握手后,这封邮件就会通过这个连接传送到收件人的邮件服务器上面,也就是Lucy的邮箱服务器上面。如果Lucy需要收取邮件,它也需要一个用户代理,就假设她用的也是OutLook (她在第一次使用OutLook时,也要配置她的邮箱服务器地址),启动OutLook后,OutLook会每隔一段时间(这个时间可以由用户自己设置)去连接邮箱服务器,判断是否收到新的邮件,如果收到了新的邮件,就使用POP3协议把这封邮件读取出来,并通过OutLook显示给Lucy看。Lucy看到邮件后,答应了Tom的请求,她就会向Tom回复—封邮件,回复邮件的过程与上面的过程是—样。
协议简介
SMTP
SMTP(Simple Mail Transfer Protocol) 即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供与来信有关的通知。
POP3
POP3(Pot Office Protocol 3) 即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
POP3协议支持"离线"邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或MAC。一旦邮件发送到PC机或MAC上,邮件服务器上的邮件将会被删除。但目前的POPg邮件服务器大都可以只下载邮件,服务器端并不删除”,也就是改进的POP3协议。
IMAP
Internet Mail Access Protocol (交互式邮件存取协议)。IMAP是斯坦福大学在1986年开发的研发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。
IMAP协议比较酷的功能是用户可以维护自己在服务器上的邮件目录;可以直接抓取邮件的特定部分(例如只有文本)。
IMAP的一个与POPs的区别是:IMAP它只下载邮件的主题,并不是把所有的邮件内容都下载下来,而是你邮箱当中还保留着邮件的副本,没有把你原邮箱中的邮件删除,你用邮件客户软件阅读邮件时才下载邮件的内容。较好支持这两种协议的邮件客户端有:ThunderMail.Foxmail,outlook等。
MIME
由于SMTP这个协议开始是基于纯ASCI文本的,在二进制文件上处理得并不好。后来开发了用来编码二进制文件的标准,如MIME,以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本一样简单。
在.NET中如何实现
常用的邮件服务器地址:
126邮箱
POP3服务器:pop.126.comSMTP服务器:smtp.126.com
163邮箱
POP3服务器:pop.163.comSMTP服务器:smtp.163.com
yahoo邮箱
注意:yahoo在foxmail 4.1以上的版本设置如下:
POP3服务器:pop.mail.yahoo.com.cn SMTP服务器:smtp.mail.yahoo.com.cn
Sohu邮箱
POP3服务器:pop3.sohu.com SMTP服务器:smtp.sohu.com
Gmail邮箱
第一步:要手动配置,POP3服务器是pop.gmail.com SMTP服务器是smtp.gmail.com
第二步:使用自动配置文件 http://toolbar.google.com/gmail-helper/GmailConfig.exe这样就OK喽~可以发送和接收Gmail邮件了。
QQ邮箱
POP3服务器:pop.qq.com SMTP服务器:smtp.qq.com SMTP服务器需要身份验证
从上面大家可以看出,一般的POP3邮件服务器地址为pop然后加上自己的域名,SMTP邮件服务器地址为smtp加上自己的域名。常用的邮件服务器地址都可以在网上找到,各大型邮箱smtp服务器及端收集。
可能会遇到的问题
配置用户代理
编写Socket程序发送电子邮件
// from:<~@sohu.com>// to:< ~@qq.com >代码如下:public static void main(String[] args) throws Exception{//创建socket对象Socket sk=new Socket("smtp.sohu.com",25);//创建输出流对象OutputStream os=sk.getOutputStream();//创建输入对象sk.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream()));System.out.println(br.readLine());os.write("ehlo redarmychen/r/n".getBytes());System.out.println(br.readLine());System.out.println(br.readLine());System.out.println(br.readLine());os.write("auth login/r/n".getBytes());System.out.println(br.readLine());os.write("cmVkYXJteWNzZG4=/r/n".getBytes());System.out.println(br.readLine());os.write("cmVkYXJteWNzZG4=/r/n".getBytes());System.out.println(br.readLine());os.write("mail from:<redarmycsdn@sohu.com>/r/n".getBytes());System.out.println(br.readLine());os.write("rcpt to:< 1137760725@qq.com >/r/n".getBytes());System.out.println(br.readLine());os.write("data/r/n".getBytes());System.out.println(br.readLine());os.write("from:<redarmycsdn@sohu.com>/r/n".getBytes());System.out.println(br.readLine());os.write("to:< 1137760725@qq.com >/r/n".getBytes());System.out.println(br.readLine());os.write("subject:中奖了,快去看看吧>/r/n".getBytes());System.out.println(br.readLine());os.write("恭喜你获得一万元的大奖,请尽快登陆xxxxxxxxx领取/r/n".getBytes());os.write("./r/n".getBytes());System.out.println(br.readLine());os.write("quit/r/n".getBytes());br.close();os.close();sk.close();}
(邮件/用户)代理协议简介Socket程序发送电子邮件相关推荐
- 如何从我的Android应用程序发送电子邮件?
我正在为Android编写应用程序. 如何从中发送电子邮件? #1楼 简单尝试这个 public void onCreate(Bundle savedInstanceState) {super.onC ...
- wordpress发邮件_如何修复WordPress不发送电子邮件的问题
wordpress发邮件 One of the most commonly asked questions on WPBeginner is how to fix WordPress not send ...
- java发送hotmail邮件_如何使用Gmail、Yahoo或Hotmail通过Java应用程序发送电子邮件?...
首先下载JavaMail API并确保相关的JAR文件在您的类路径中. 下面是一个使用Gmail的完整示例.import java.util.*;import javax.mail.*;import ...
- php 发邮件附件pdf,php – 使用TCPDF发送电子邮件附件 | 码农网
我有一个简单的课程申请表,填写完成后,会向申请人发送一封电子邮件,并附上他选择作为pdf附件的课程的费用报价. 我正在使用TCPDF并使用会话变量将数据从表单传递到库.内容采用 html 格式. 生成 ...
- android studio发邮件功能,Android发送电子邮件
电子邮件是通过电子方式从一个系统用户通过网络分发给一个或多个收件人的邮件. 在开始电子邮件活动之前,您必须意图了解电子邮件功能,Intent在应用程序或应用程序外部将数据从一个组件传输到另一个组件. ...
- android发送电子邮件,Android发送电子邮件
电子邮件 是通过电子方式从一个系统用户通过网络分发给一个或多个接收者的消息. 在开始电子邮件活动之前,您必须知道具有意图的电子邮件功能,Intent将数据从一个组件传送到应用程序中或应用程序外部的另一 ...
- php sll邮箱注册_使用php发送电子邮件(phpmailer)
在项目开发过程中,经常会用到通过程序发送电子邮件,例如:注册用户通过邮件激活,通过邮件找回密码,发送报表等.这里介绍几种通过PHP发送电子邮件的 方式(1)通过mail()函数发送邮件(2)使用fso ...
- delphi indy_使用Delphi和Indy发送电子邮件(和附件)
delphi indy Below are instructions for creating an "email sender" that includes an option ...
- linux 向程序发送信号,Linux下的信号处理
Linux下的信号处理 发布时间:2006-01-02 09:34:14来源:红联作者:reing 前言:这一章我们讨论一下Linux下的信号处理函数. Linux下的信号处理函数: 信号的产生 信号 ...
最新文章
- 二叉树 2.0 -- 非递归遍历
- 【转】Linux世界驰骋——文件系统和设备管理
- 修改项目名称后,部署到tomcat问题
- PHP如何处理emoji表情存入utf8的数据库
- php 读取文件的所有图片格式,扣丁学堂PHP培训简述PHP如何读取文件夹下所有图片、文件-php文件...
- 计算机安全最基础知识,计算机的分类(信息安全基础知识)
- Linux:ubuntu 下安装软件,卸载,查看已经安装的软件
- 数据分析-R语言资料整理
- webstorm开发微信小程序
- 编译原理初学者入门指南
- mta android 网速监控,网速监控
- xdocreport根据模板生成合同(docx/pdf)神器:(三)如何制作报告模板并根据它生成docx或者ppt
- 麦田守望者--走出软件作坊:三五个人十来条枪 如何成为开发正规军(四十三)
- sparkGraphX 图操作:pregel(加强的aggregateMessages)
- 图表绘制与处理的常用软件
- 21天减肥法反弹案例-987减肥网
- 灰色关联度矩阵模型及其MATLAB实现
- 基于物联网流量指纹的安全威胁轻量级检测方法
- 房产地籍数据精度表格
- Mac设置隐藏程序坞响应时间有一秒延迟
热门文章
- 太可怕,这项技术仅通过语音就能勾勒出你的长相
- android动态设置软键盘弹出模式,Android 弹出软键盘所遇到的坑及解决方法
- RabbitMQ的Federation和Shovel的使用
- 用python写一个图形界面!
- Linux下搭建rabbitMQ、安装jdk、安装redis、安装zookeeper、docker安装MySQL、防火墙常用命令、docker安装、Windows下嘛呢私服搭建、Nginx安装
- python函数调用另一个函数的变量_python怎么调用另一个函数的变量。不用return
- 关于iframe 嵌套页面
- 阿里云Code源码管理
- 设备重启卡死问题分析-reboot卡死
- 您知道只需2步就可以展示健康码的方式吗