smtp 邮件服务器编程

PHP利用Socket发送HTTP协议和SMTP协议 学习背景 最近需要写一个发送邮件的功能,之前都是直接利用好成熟的扩展包来实现这个功能。所以一直不太清楚邮件功能具体是怎么实现的。 所以,这两天花时间尝试了解了一下如果使用php 发送邮件邮件发送原理 在了解如何使用PHP发送原理之前,先了解邮件发送和接受的原理。 1.1 邮件服务器邮件传输协议 要在Internet上发送邮件,那么必须使用专门的电子邮件服务器(mail s... 阅读详情


刚开始做邮件服务器开发,一切都是茫然的。在书上网上都很难找到一套完整的邮件服务器开发教程。在个人的摸索中碰到了很多蛋疼得问题。现终于完成了,将我的开发经验分享给大家。

 

开发环境:vs2012 mfc

 

注意事项:

1、 网络环境:

作为邮件服务器,要接收来自互联网的邮件,就得有能映射到外网的服务器。至少映射25(SMTP)端口(pop3都暂时不重要)。对于没有外网条件的的小伙伴,推荐以下几种方法调试:

A、如果你使用model上网,查看你的电脑的外网IP。看看是否和model的一致。一致则说明你有一个公网IP。如果没有,就致电网络运营商,叫他给你换回公网IP,语气一定要强硬。有了公网IP,你就能把smtp的端口映射出去。具体方法请搜索。

B、对于一些校园网或大型局域网的用户,那就有点悲剧了,基本无法直接将端口映射出去。但可以参考C方法。

C、先在的网上的网络穿透都做的比较好,甚至能媲美公网ip的直接映射。去网上下载一些穿透软件:花生壳之类的。都有提供内网穿透。给大家推荐个免费的网络穿透软件:nat123 。这软件很好有,up主不经意的发现有大量的小学生用它在开MC的服务器。

D、如果你暂不需要使用外部的邮件服务器来测试你的服务器,那就在内网用其他的邮件服务器发送至你的邮箱进行测试,要注意端口冲突。

2、 编写smtp邮件服务器:

对于拥有外网映射的,可以先编写smtp 的接收服务器。这样的好处是,能接收识别它域的不同类型格式的邮件,到自己发送邮件的时候,对邮件格式能有一个很好的组织。 而对于只能使用内网的用户,建议先编写发送端。成功进行对各个邮件服务器的发送后(这里比较蛋疼,后面会介绍到),就可以在编写邮件接收端的时候用来测试。

3、 邮件服务器域名(MX)的获取:

最开始用telnet测试163的smtp。网上搜索各大邮件服务器的stmp服务器,当初搜索出来的结果把我着实误导了好一阵子。举个例子把,就常用的企鹅邮箱,搜索出来的结果是:smtp.qq.com  25 。于是傻傻地telnet上去helo他,他告诉我他是ehlo服务器,要登陆验证遇到这种问题真是想哭,我一个发邮件的我给你登陆什么啊,其他smtp.jbjb.com邮箱也是这样?与是想了各种奇葩的情况与方法浪费了很多时间。最后自己去抓了一个邮件服务器的向企鹅邮箱发送的包,首先是几个dns的包。看到有几个dns包,自己心理顿时想到了smtp前缀的域名不是接收外域邮件的域名,看了下dns到的地址:mx1.qq.com mx2.qq.com... 原来这才是接收邮件的服务器域名。这时候才明白自己以前挂的域名时也配置有MX地址。 总之,我们发邮件一定要先获取邮件接收服务器的域名。

4、 防止反垃圾邮件:

把邮件发往其他邮件服务器,很容易被识别为垃圾文件。新浪邮箱最讨厌,直接不信任我的域名和IP地址。最初邮件格式不完善,也被企鹅断断续续封了几天。就163最包容,我的邮件都慷慨地接收了。

现在发邮件,除了基本的格式,不用MINE根本不行,尤其是当需要图片或者附件的邮件。

5、 加密:

一般可用base64对邮件标题和内容进行加密。

6、 邮件存储:

建议储存为eml格式的邮件文件,不仅利于转发或其他应用查看,也便于之后的pop3服务器使用。

7、 web端cms

超麻烦的东西,找个模板改改吧。


 

先粗略讲讲SMTP协议发送邮件的过程:

直接举个例子:

R: 220 mx.jb.com MX JB Mail Sever

S: helo wchrt.vicp.cc

R: 250 OK

S: mail from: <jb@wchrt.vicp.cc>

R: 250 OK

S: rcpt to: <414322153@qq.com>

R: 250 OK

S: data

R: 354 End data with<CR><LF>.<CR><LF>

S: mail from: jb@wchrt.vicp.cc

S: rcpt to: 414322153@qq.com

S: subject: 你好

S: 约不约?

S: <CR><LF>.<CR><LF>

R: 250 OK in queue

S: QUIT

R: 221 close

 

 

该次对话中首先我们链接服务器后服务器给我们返回了220 和服务器的域名信息,表示该邮件服务器正常工作,可以提供服务。

然后我们发送helo过去标示自己服务器的域名。

服务收到后250说明和helo成功

之后是mailfrom 说明发件人的email地址

250 ok后再rcptto 说明发送目标的Email地址

成功后,就可以发送data命令发送邮件内容了。

Data返回的值说明邮件以<CR><LF>.<CR><LF>为结束标记。<CR><LF>这个标示符用换行符\r\n即可。

最后返回250 标示邮件接收成功。QUIT退出。

 

以下是服务器返回的一些编号:

501 参数格式错误

502 命令不可实现

503错误的命令序列

504 命令参数不可实现

211系统状态或系统帮助响应

214帮助信息

220 <domain>服务就绪

221 <domain>服务关闭传输信道

421 <domain>服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)

250要求的邮件操作完成

<
Windows系统中SMTP服务器的配置指南 SMTP(简单邮件传输协议)是用于发送电子邮件的行业标准协议。它是互联网上主要的邮件交换协议,负责将邮件从发送者的邮件服务器传送到接收者的邮件服务器SMTP服务器是负责处理和转发SMTP协议邮件的服务器。Internet Information Services (IIS) 是微软公司开发的一款用于Windows平台的Web服务器软件。IIS提供了一系列用于管理网站、FTP站点、SMTP服务器以及其他因特网相关服务的工具。IIS的主要功能与特性包括但不限于:Web服务器。 阅读详情

相关推荐

C++SMTP服务器源码解析与邮件服务开发

邮件通信是互联网时代的重要组成部分,而SMTP(Simple Mail Transfer Protocol)协议作为电子邮件传输的标准,扮演着核心角色。SMTP协议定义了邮件服务器之间发送电子邮件的标准,保证了邮件能够可靠地从发送方传递到接收方。SMTP协议是一个基于文本的协议,其通信过程由一系列命令和响应组成。命令通常由客户端发起,而响应则由SMTP服务器返回。一个典型的SMTP命令集包括:HELO/EHLO: 用于客户端向服务器声明自己的身份。MAIL FROM。

weixin_34620658的博客 789

基于POP3、SMTP协议的MFC实现邮件客户端

POP3: 1.支持本地缓存最新的3封邮件。 2.正常解析出收件人、发件人、主题、日期、邮件内容。 3.正常解析无格式纯文本,支持中文、英文和中英混杂文本。 4.接收邮件时存在附件则弹出保存文件的对话框,无附件则对话框提示该邮件无附件。 5.支持删除指定的邮件。 6.列表显示当前服务器邮件的信息。 SMTP: 1.支持发送中英文的邮件。 2.支持给多人发送邮件,每个收件人之间用“;”隔开。 3.支持发送多个附件。 4.附件支持有限个常见的文件格式,如jpg、txt、doc、exe、rar、zip等。

SMTP邮件发送(MFC、VC++)耿网出品

SMTP邮件发送(MFC、VC++)耿网出品

VC MFC 邮件发送功能的实现

http://www.naughter.com/smtp.html CPJNSMTP目前是写的比较完善的MFC程序,目前它源码最新是支持VS2015。 这个库支持多国语言,发送邮件不会出现乱码。 并且支持SSL验证,笔者已在QQ和163邮箱测通过,注意QQ邮箱设置第三方收件,用的是授权码,不是邮箱密码! 下面是笔者的经历,因为该库默认是支持win7系统的,如果要改成支持XP,得修改...

tajon1226的专栏 9442

这39个端口黑客最常攻击,看看有哪些?

在计算机网络中,端口是指网络通信的端点,用于标识网络中不同的服务或应用程序。每个端口都对应一个特定的网络协议,并且在一个主机的IP地址上可以有多个端口同时开放。端口的编号范围从0到65535,其中较低编号的端口通常用于众所周知的服务(称为“知名端口”),例如HTTP(80端口)、HTTPS(443端口)、FTP(21端口)等。这些端口由IANA(Internet Assigned Numbers Authority)分配给特定的服务和协议。常见的服务如HTTP、FTP、SMTP等都在此范围内。

Python_0011的博客 3201

自建 SMTP 邮件发送服务

如果不能收到,请检查 chasquid 的日志 ( journalctl -n 10 --no-pager --no-hostname -u chasquid -f 或者grep chasquid /var/log/syslog)。因为没找到免费的支持万能地址 (Catch-All,能接收任何发送到此域名邮件,不限制前缀)的企业邮箱,所以我用 chasquid 把所有的邮件都转发到 我的 Gmail 信箱。(如下图),表示这时候系统还没装完,请断开 ssh,等待几分钟再次登录。

shelutai的博客 3214

linux网络编程实验七报告,实验七应用层网络编程-20210411024401.docx-原创力文档

Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】实验七应用层网络编程浙江大学城市学院实验报告课程名称 计算机网络应用实验项目名称 实验七 应用层网络编...

weixin_42299198的博客 238

计网大作业--SMTP邮件代理服务器

SMTP邮件代理服务器

anewpunpkin的博客 2891

【计算机网络】SMTP协议

SMTP协议,即简单邮件传输协议(Simple Mail Transfer Protocol),是一种用于发送电子邮件互联网标准。SMTP定义了邮件服务器之间以及邮件客户端与服务器之间的通信规则。它规定了邮件服务器如何处理和转发邮件,以及如何将邮件从发送者传递到接收者。

大雨淅淅的博客 3116

python搭建邮件服务器地址_【玩树莓】编程篇(三)Python 实现SMTP发送邮件、Web服务器...

1. 使用SMTP发送邮件SMTP (Simple Mail Transfer Protocol)即简单邮件传输协议,通过该协议可以用简短的代码完成邮件的接收和发送。Python提供了smtplib库来进行SMTP操作,下面就是一个SMTP发送邮件的例子。我们首先要准备好一些邮件必要的信息,如接收方的地址。另外由于邮件发送本身还是由邮件服务器完成的,因此需要邮件服务器的地址和账号、密码。这里采用G...

weixin_39871562的博客 1608

MFC 基于SMTP POP3协议 写的邮件收发

用MFC写的邮件客户端。基于SMTP POP3协议,支持收发件,支持发送带附件和附件删除,在VS2017上能运行(需要下载一些库函数,vs里修改SDK)课设作业需要的快下! 怎么变成需要11个积分了?我明明设置的很便宜的

想建立自己的EMAIL服务器吗?向您推荐一款非常好用的邮件服务器程序。

想建立自己的EMAIL服务器吗?向您推荐一款非常好用的邮件服务器程序。

SMTP邮件发送程序实验报告

利用WinSock编程接口编写SMTP邮件发送程序,在用户界面中给出必要的邮件信息:收件人、标题、内容等,通过SMTP协议将邮件发送给指定的接收人。通过给自己的邮箱发送邮件的方式,可以登录自己的邮箱,验证发送程序运行是否正确。

SMTP服务器(C语言编写)

Linux下的SMTP服务器代码。直接连接LINUX的发邮件客户端。实现SSL加密

推荐一篇好文章,如何构建.NET邮件服务器

The Serverside .Net上有一篇介绍如何用.NET技术构建邮件服务器的文章,值得一读。记得自己原来写过的那个SMailer(C++ Wrapped Classes For Mail Sending),所以看到这篇文章就觉得很亲切,不少内容当时我都有所涉及,只是所用技术不同而已。 轻松驾驭Socket — 一个简单的.NET电子邮件服务器(Riding on Sockets - A S

晴耕小筑 1226

计算机网络课后——socket编程邮件客户)

计网课后编程作业 邮件客户(SMTP) 这个编程作业的目的是创建一个向任何接收方发送电子邮件的简单邮件客户。你的客户将必须与邮件服务器(如谷歌的电子邮件服务器)创建一个TCP连接,使用SMTP协议与邮件服务器进行交谈,经该邮件服务器向某接收方(如你的朋友)发送一个电子邮件报文,最后关闭与该邮件服务器的TCP连接。 对本作业,配套Web站点为你的客户提供了框架代码。你的任务是完善该代码并通过向不同的用户账户发送电子邮件来测试你的客户。你也可以尝试通过不同的服务器(例如谷歌的邮件服务器和你所在大学的邮件服务器

InterplanetaryW的博客 1452

Java Mail

一、邮件服务器和电子邮箱        邮件服务器:要在 Internet 上提供电子邮件功能,必须有专门的电子邮件服务器。这些服务器类似于现实生活中的邮局,它主要负责接收用户投递回来的邮件,并把邮件投递到邮件接收者的电子邮箱中。          电子邮箱:其实就是用户在邮

DriverKing 2105
下一篇: SOCKET 实现NAT 穿越
wchrt
博客等级 码龄13年 15粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值