发送邮件编程原理
来源:互联网 发布:我的世界盒子枪械js 编辑:程序博客网 时间:2024/06/04 19:09
一、用telnet发送邮件
邮件系统使用esmtp协议,按照协议规定的格式,我们就可以不用启动邮件客户端来发邮件.esmtp是smtp协议的进化版,主要是为了防止垃圾邮件的泛滥.esmtp比smtp协议添加了验证用户身份等.
1. 输入 telnet smtp.qq.com 25 回车
我试验了好几个邮箱服务器,大都有严厉的反垃圾邮件系统,导致邮件发不出去,幸好qq的邮箱竟然可以.TX威武呀.smtp的协议端口为25.
2. 输入 helo smtp.qq.com 回车
我搜集的一些资料中既有使用helo又有使用ehlo的,结果还使我纠结了好久,后来又google才知道,原来都可以.这句应该是与服务器打招呼.如果返回250表示服务器准备就绪,可以进行下一步了.
3. 输入 auth login 回车
这是指定登录的模式,这句应该是一般模式.返回334就可以进行下一步了.
4. 输入 经过base64加密的你的账户名,比如你的qq号是123456,就去百度下 base64加密,然后找个地方将你的q号加密,copy到命令行回车
返回334,下一步是输入经过base64加密过的你的密码
5. 输入 你的base64加密过的密码,方法同上
然后服务器返回235,表示验证通过,可以进行下一步了.
6. 输入 mail from:<****@qq.com> 这里写你的qq邮箱
服务器返回250.
7. 输入 rcpt to:<****@qq.com> 这里写你要发送给的qq邮箱,貌似其他邮箱不可以
服务器返回250,下一步
8. 输入 data
表示开始传送数据,服务器返回354
9. 输入 subject:你的主题
此处服务器无回显
10. 输入 此处什么也不用写,直接回车换行,作为主题与正文的分界
此处服务器无回显
11. 输入 在这里写你的正文就可以了
此处服务器也无回显
12. 输入 .
对,就是一个英文句号,表示数据传送完毕,服务器返回250
13. 输入 quit
服务器返回221,就安了,完成了,看看邮件收到了没
来自:http://hi.baidu.com/hygf99/blog/item/80dedec396862428e4dd3bf5.html
二、QT发送邮件编程测试(源码修改)
#include <QApplication>#include <QTcpSocket>#include <QThread>#include <QDebug>#include <stdio.h>#include <iostream>using namespace std;static void communication(QTcpSocket & socket, const char *msg){ char data[1024]; if (socket.write(msg, qstrlen(msg)) == -1) qDebug() << "@@@@@@@@@@@@@@ socket.write failed"; socket.flush(); if (socket.waitForReadyRead(-1) == true) { memset(data, '\0', sizeof(data)); socket.readLine(data, 1024); qDebug() << data; }}static void smtpCommunication(QTcpSocket & socket){ communication(socket, "helo sina.com\r\n"); communication(socket, "auth login\r\n"); communication(socket, QByteArray("xxx@sina.com").toBase64()+"\r\n"); communication(socket, QByteArray("xxx").toBase64()+"\r\n"); communication(socket, "mail from: <xxx@sina.com>\r\n"); communication(socket, "rcpt to: <xxx@qq.com>\r\n"); communication(socket, "data\r\n"); communication(socket, "From: xxx@sina.com\r\nTo: xxx@qq.com\r\n" "Subject: QT EMAIL\r\n\r\n" "QT EMail Test!" "\r\n.\r\n"); communication(socket, "quit\r\n"); qDebug() << "send email ok." << endl;}static void readWelcome(QTcpSocket & socket){ char data[1024]; int len; if (socket.waitForReadyRead(-1) == true) { memset(data, '\0', sizeof(data)); len = socket.readLine(data, 1024); qDebug() << data << endl;; }}int main(int argc, char* argv[]){ QTcpSocket socket; socket.connectToHost("smtp.sina.com", 25); if (socket.waitForConnected(2000)) { qDebug() << "smtp server connected success."; readWelcome(socket); smtpCommunication(socket); socket.close(); } else qDebug() << "connection failed."; return 0;}
来自:http://blog.chinaunix.net/uid-7210505-id-146366.html
其他:http://blog.csdn.net/zhangmiaoping23/article/details/6130080
- 发送邮件编程原理
- 发送邮件编程原理
- PHP发送邮件原理
- php发送邮件原理
- 邮件发送原理
- php发送邮件原理
- 邮件发送的原理
- 邮件发送的原理
- 邮件发送原理
- 发送邮件的原理
- 编程发送邮件
- 邮件发送和接收原理
- 邮件发送和接收原理
- 邮件发送和接收邮件原理
- 编程经验:邮件发送接收
- Socket网络同步异步编程+邮件发送代码+TCP/IP原理解析
- 邮件的发送与接收原理
- 邮件的发送与接收原理
- APP性能之终端兼容优化分享
- word-wrap,word-break,white-space,text-overflow的区别和用法 文字处理方法
- zz - transcript of Defining and Using Shared Resources in a Custom Control Library
- mysql 新建用户不能show databases;
- iis 无法找到该页
- 发送邮件编程原理
- 数据库大作业
- HTML Application
- Java数据库设计14个技巧
- Java常用术语解释
- 上一个计算器有bug,还是用语法制导的方法计算表达式,这个没有bug,用的是LL(1)表达式文法,以=号结束
- 两个数组a[n],b[n]重新排列后,两数组的和的差最小
- [JAVA]使用Eclipse从下载到编写一个实例全过程
- VS2008 VS2010发布网站时如何产生固定命名的 Dll 文件