Linux下SMTP发送邮件的例子

C++通过socket套接字,使用smtp协议和pop3协议进行邮件发送和读取。

Smtp协议很简单,在建立socket之后。

依次发送如下消息。

EHLO   服务器地址

AUTH LOGIN

USER   邮箱帐号

PASS    邮箱密码      /*邮箱密码是需要base64加密的*/

MAIL FROM:   发件人地址

RCPT TO: 收件人地址

DATA

Subject: 主题

From: 发件人

To: 收件人

邮件内容   /*base64编码*/

.              /*符号 "." 独占一行*/

QUIT

Socket初始化:

sock = socket(AF_INET, SOCK_STREAM, 0);

fcntl(sock, F_SETFD, O_NONBLOCK);

memset(&server, 0,sizeof(server));

server.sin_family = AF_INET;

hp = gethostbyname(serverUrl.c_str());

每将一行数据发送到socket,就再发送一个回车换行符 "\r\n" 。通知系统执行命令。

在写这个程序的时候,最初是用同步方式。在同步通信下,如果某步骤延时,将导致这个软件一直无法返回。随后改为异步通信,上面代码为异步通信参数设置。

每发送一次命令,就读取服务器响应,超时,将返回。

在linux c++,不熟悉定时器使用,就改为程序里计算运行时间的方式,在write_socket函数里面,判断是否超时,超时则抛出一个TimeoutException异常,由外层程序接受异常,进行处理。

------------------------------------------------------------------------------------------------------------

POP3

Pop3协议收取邮件和smtp发送邮件类似,但是邮件内容解码比较麻烦,很多邮件还带有附件。

USER   邮箱帐号

PASS    密码

STAT                /*邮箱情况*/

LIST               /*列出邮件编号 及大小*/

RETR   邮件编号     /*第i封邮件内容*/

QUIT

Pop3处理附件是对附件进行base64编码,然后放在邮件内容中的,使用特定的分隔符进行分割。获得邮件后,需要解析邮件内容,将里面的附件内容部分,保存为附件文件。

因为使用标准c++ ,所以windows平台下也可以进行同样处理。

原文链接: https://www.cnblogs.com/adodo1/archive/2012/07/16/4327164.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    Linux下SMTP发送邮件的例子

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/55441

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午6:33
下一篇 2023年2月9日 上午6:34

相关推荐