转: http://www.qtcn.org/bbs/read.php?tid=13171
QUrl url("mailto:[email protected]?subject=Send Email&Attach=/home/dudu/desktop/l-os3e.zip") ;
QDesktopServices::openUrl(url) ;
有附件没有?没有的话直接用SOCKET发送就行了。SMTP协议。网上很多,参照一下很容易的。
http://bbs.chinaunix.net/viewthread.php?tid=913659
http://www.luocong.com/opensources.htm
转:http://www.chinaemail.com.cn/zixun/yjxt/201003/45774.html
教您用telnet命令发送邮件
邮件的发送是基于smtp协议的。邮件客户端 软件给smtp服务器传送邮件和smtp服务 器之间传送邮件也都是基于smtp协议的。邮件 客户端 软件 接受邮件 是主要基于pop3协议的。
下面介绍利用windows命令telnet 基于smtp协议发送邮件 。
这里是用yahoo邮箱,其他邮箱 可能会存在这样或那样的小问题 ,而我的目标很简单,只是想尽快用telnet命令发送一封邮件 测试一下。
这里用到smtp协议的5个命令。下面列举出所有:
ehlo 见面当然得打招呼了,后面接任意名字
mail from: 说明邮件来自哪里,不一定为邮件 地址,不过最好还是写成正确的email地址
rcpt to: 说明邮件 发送到哪里,一定要为正确的email地址
data 发送的正文,结束为:回车,.,回车。即两个回车中间一个点
quit 断开连接
1, 打开windows命令窗口,
键入:telnet mta-v1.mail.vip.cnb.yahoo.com
mta-v1.mail.vip.cnb.yahoo.com是yahoo邮件 服务器,25 是服务 器的端口号,
Yahoo邮件 服务 器的mx nslookup -qt=mx yahoo.com.cn
成功连接的响应为:220 mta115.mail.cnb.yahoo.com ESMTP YSmtp service ready,
前面的 220 即为响应码,只要它是 220 就表示成功连接了,
其中的 ESMTP 表示 扩展SMTP协议,
2,成功连接后就想服务 器打招呼吧,
键入:ehlo
3,输入发件人,
键入:mail from: <[email protected] >
成功将响应:250 Ok
发件人最好写成正确的email地址,因为一般邮件 服务 器也会验证的
4,输入收件人,
键入:rcpt to: <[email protected] >
成功将响应:250 Ok
收件人必须是正确的email地址,
并且可以输入多个 rcpt to 命令,将同时给多个email地址发送邮件
5,写邮件 内容,
键入:data (+ 内容),以回车 . 回车 结束内容的书写,
6,断开连接,
键如:quit
7,赶紧登陆邮箱 看看吧,看是否收到了
转:
Qt 发送邮件例程
A simple mail client This example shows how to use the QSocket class. The client can only be used to send mails. The interesting part is the implementation of the SMTP protocol. Header file (smtp.h): /**************************************************************************** ** $Id: qt/smtp.h 3.0.6 edited Oct 12 2001 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #ifndef SMTP_H #define SMTP_H #include <qobject.h> #include <qstring.h> class QSocket; class QTextStream; class QDns; class Smtp : public QObject { Q_OBJECT public: Smtp( const QString &from, const QString &to, const QString &subject, const QString &body ); ~Smtp(); signals: void status( const QString & ); private slots: void dnsLookupHelper(); void readyRead(); void connected(); private: enum State { Init, Mail, Rcpt, Data, Body, Quit, Close }; QString message; QString from; QString rcpt; QSocket *socket; QTextStream * t; int state; QString response; QDns * mxLookup; }; #endif Implementation (smtp.cpp): /**************************************************************************** ** $Id: qt/smtp.cpp 3.0.6 edited Apr 18 14:18 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include "smtp.h" #include <qtextstream.h> #include <qsocket.h> #include <qdns.h> #include <qtimer.h> #include <qapplication.h> #include <qmessagebox.h> #include <qregexp.h> Smtp::Smtp( const QString &from, const QString &to, const QString &subject, const QString &body ) { socket = new QSocket( this ); connect ( socket, SIGNAL( readyRead() ), this, SLOT( readyRead() ) ); connect ( socket, SIGNAL( connected() ), this, SLOT( connected() ) ); mxLookup = new QDns( to.mid( to.find( '@' )+1 ), QDns::Mx ); connect( mxLookup, SIGNAL(resultsReady()), this, SLOT(dnsLookupHelper()) ); message = QString::fromLatin1( "From: " ) + from + QString::fromLatin1( "/nTo: " ) + to + QString::fromLatin1( "/nSubject: " ) + subject + QString::fromLatin1( "/n/n" ) + body + "/n"; message.replace( QRegExp( QString::fromLatin1( "/n" ) ), QString::fromLatin1( "/r/n" ) ); message.replace( QRegExp( QString::fromLatin1( "/r/n./r/n" ) ), QString::fromLatin1( "/r/n../r/n" ) ); this->from = from; rcpt = to; state = Init; } Smtp::~Smtp() { delete t; delete socket; } void Smtp::dnsLookupHelper() { QValueList<QDns::MailServer> s = mxLookup->mailServers(); if ( s.isEmpty() && mxLookup->isWorking() ) return; emit status( tr( "Connecting to %1" ).arg( s.first().name ) ); socket->connectToHost( s.first().name, 25 ); t = new QTextStream( socket ); } void Smtp::connected() { emit status( tr( "Connected to %1" ).arg( socket->peerName() ) ); } void Smtp::readyRead() { // SMTP is line-oriented if ( !socket->canReadLine() ) return; QString responseLine; do { responseLine = socket->readLine(); response += responseLine; } while( socket->canReadLine() && responseLine[3] != ' ' ); responseLine.truncate( 3 ); if ( state == Init && responseLine[0] == '2' ) { // banner was okay, let's go on *t << "HELO there/r/n"; state = Mail; } else if ( state == Mail && responseLine[0] == '2' ) { // HELO response was okay (well, it has to be) *t << "MAIL FROM: <" << from << ">/r/n"; state = Rcpt; } else if ( state == Rcpt && responseLine[0] == '2' ) { *t << "RCPT TO: <" << rcpt << ">/r/n"; state = Data; } else if ( state == Data && responseLine[0] == '2' ) { *t << "DATA/r/n"; state = Body; } else if ( state == Body && responseLine[0] == '3' ) { *t << message << "./r/n"; state = Quit; } else if ( state == Quit && responseLine[0] == '2' ) { *t << "QUIT/r/n"; // here, we just close. state = Close; emit status( tr( "Message sent" ) ); } else if ( state == Close ) { delete this; return; } else { // something broke. QMessageBox::warning( qApp->activeWindow(), tr( "Qt Mail Example" ), tr( "Unexpected reply from SMTP server:/n/n" ) + response ); state = Close; } response = ""; } See also Network Examples.
转:http://www.bsdlover.cn/html/73/n-3573.html
垃圾邮件过滤器通常根据电子邮件来源或内容来判断邮件是不是垃圾邮件,并阻断约 20% 的电子邮件营销信息,绝大多数则由客户决定其是否为垃圾邮件:如果用户对消息的投诉比例超过了一定的阈值,通常是 1%-2% ,则大多数 ISP 将把这个消息的发送方标记为垃圾邮件发送方。
ISP 电子邮件进行特征考察的方法是众多的,因此不存在标准 。
随着垃圾邮件越来越泛滥,世界上所有的 ISP 和服务器提供商都采取了越来越严厉的垃圾邮件过滤规则,即使是正在的、合理合法的用户邮件或者电子邮件营销,也有可能进入垃圾信箱,我们要做的就是了解垃圾邮件过滤规则,尽量避免进入垃圾信箱。
l 以触发式的过滤算法 鉴别垃圾邮件
这 种过滤器通常已经安装 在 电子邮件客户端软件或者邮件服务器上,其原理是过滤软件检查邮件发送人、标题、正文内容,以及邮件中出现的链接和域名,甚至电话号 码。当发现带明显广告性质,或者经常出现已知垃圾邮件的典型特征,则给这封邮件打一定的垃圾邮件特征分数。当分数达到一定数值时,邮件将被标志为垃圾邮 件,直接过滤到垃圾邮件文件 夹。
比如,邮件标题中出现¥、 $ 符号,可以给予 2 分垃圾邮件分数。邮件内容中出现 “ 免费 ” 、 “ 发票 ” 、 “ 促销 ” 等典型垃圾邮件中经常出现的词汇时,也各给予 1 分。邮件中如果包含已经被确认为经常发送垃圾邮件的域名,再加 1 分。甚至邮件内容中出现被确认与垃圾邮件相关的电话号码,也给个分数。当这些垃圾分数相加达到某一个数值时,比如达到 10 分,这个邮件将被标志为垃圾。
l 以黑名单为基础
有些创建和维护链接邮件黑名单的组织,专门接受用户的垃圾邮件投诉,如果确认确实是垃圾邮件,黑名单运行者将把发送垃圾邮件的服务器和用户 IP 地址放入黑名单。
有时候用户投诉,其实并不是真实的以为所收到的邮件是垃圾邮件,而是用户忘记了曾经注册过这个电子杂志。如果你的 IP 地址被错误的投诉而列入黑名单,唯一的办法是联系黑名单维护组织,说明情况,提出证据,要求把你的 IP 地址从黑名单中删除。不过这个过程非常复杂。
l 邮件防火墙
很多大公司的邮件服务器是运行在邮件防火墙之后,这些防火墙会共同地使用各种过滤器和黑名单,再加上自行研究的一些算法,来鉴别和剔除垃圾邮件。这些防火墙的算法更复杂,并且不与他人分享细节,对正常的邮件送达也可能有致命的影响。
l 避免利用 " 收件人 " 、 " 抄送 " 和 " 暗送 " 将一封邮件发给大量的接收者
确信一封邮件每次仅发给了一个人。同样的邮件发送给多人往往会有一部分人是不需要接收该邮件的。这样会容易被视为发送垃圾邮件。
l 选择一个能够使人信任的主题
避免使用垃圾邮件常用的单词和符号,例如“免费”“派送”、“优惠”、“代开发票”以及怪异字符等标点文字。
l 在电子邮件中含有 " 退订 " 的超链接
是不是垃圾邮件由收件人最终决定。如果他们不希望收到您发送的电子邮件,很可能会投诉。所以,一旦用户退订邮件,应立即停止发送。
l 立即停止向被收件人拒绝过的邮件地址发送邮件
如果一味地给拒绝响应人员发送电子邮件,电子邮件地址可能会失效, 某些 ISP 会保留失效的电子邮件地址来捕获垃圾邮件。
l 要求对方加入白名单
l 提醒收件人为什么会接到您发送的电子邮件
例如 “ 您在大蒜节上订阅了这个时事通讯月刊。 ” 同时附带确认链接。
l 分批发送电子邮件并使用多台发送服务器
1. 设置一个有 A 记录的 Hostname
邮件系统一般使用操作系统的 Hostname 作为 SMTP 会话中 HELO 指令后面的内容,而某些比较严格的过滤系统会要求 HELO 内容是有 A 记录的域名,且与来源 IP 匹配。所以将 Hostname 设置为一个有 A 记录的域名,而且 A 记录就指向邮件服务器所在的 IP ,这将会减少在 HELO 阶段就被接收方拒绝的机会。
2. 检查你的 IP 地址的信誉度,如果有可能尽量购买整个 C 段的 IP 地址
检查你的邮件服务器所在 IP 地址是否在国外的 RBL 组织的黑名单中,到 www.dnsstuff.com 网站,可以一次性查询某个 IP 是否在各个主要的 RBL 组织的黑名单中。如果,你的 IP 被列入了黑名单,则应该检查下面所说的 3 和 4 点,即时采取措施,如果你是因为同一个 C 段的其他 IP 被牵连进入黑名单,则应该把这个问题向你的 ISP ( IDC 机房)反映,要求他们采取行动清理垃圾源并且及时与 RBL 组织交涉。
对于有能力的公司,应该采购整一个 C 段的 IP 地址,尽量避免与别的邮件服务器混用同一个 C 段的 IP 。
3. 禁止 Open Relay
Open Relay (第三方转发)就是说允许发件人和收件人都不是本系统用户的信件转发。禁止 Open Relay 是一个最基本的要求,目前大部分邮件服务器都已经关闭了 Open Relay 功能,但是值得注意的是,某些开源的邮件系统,如 Postfix , Qmail 默认是允许本机 IP(127.0.0.1) Open Relay 的,这是一个隐患,因为垃圾邮件已经可以伪造来源 IP 为 127.0.0.1 ,所以笔者强烈建议调整邮件系统配置,设置本机 IP 也不允许 Open Relay 。
4. 对本地用户要求密码认证
对本地用户应该要求密码认证 (AUTH LOGIN) 以发送邮件,否则垃圾邮件很容易伪造本地用户外发垃圾邮件,从而大大影响了本地用户的声誉,经常会被列入 RBL 组织的黑名单中。
5. 到各个 ESP 登记你的 IP 地址
为了提供你的 IP 声誉,你还可以主动去各个邮件服务商的网站登记你的 IP 地址和邮件系统情况,这样将大大减少这些运营商拦截从你的邮件系统发出的邮件的机会。
你可以发送邮件给中国互联网协会反垃圾邮件中心的管理信箱 [email protected] 登记你的邮件服务器 IP 和域名的对应关系。
6. 设置 SPF 记录
SPF 是为了防范垃圾邮件而提出来的一种 DNS 记录类型,它是一种 TXT 类型的记录,它用于登记某个域名拥有的用来外发邮件的所有 IP 地址。
dig TXT 21cn.com
21cn.com. 27970 IN TXT "v=spf1 ip4:202.105.45.0/24 ip4:61.140.60.0/24 ip4:202.123.79.206 ip4:220.232.167.218 ip4:221.192.129.0/24 ip4:59.36.102.0/24 -all"
按照 SPF 的格式在 DNS 记录中增加一条 TXT 类型的记录,将提高该域名的信誉度,同时可以防止垃圾邮件伪造该域的发件人发送垃圾邮件。
7. MX 设置问题
有一些的比较苛刻的垃圾邮件过滤系统会检查发件人域名的 MX 记录。首先, MX 记录应该设置为有 A 记录的 CNAME 。其次, MX 记录的刷新时间 (TTL) 应该设置不少于 7200 秒( 2 小时)。如果,你的邮件服务器的外发 IP 和接收的 IP 是不同的,那么最好要求你的接入服务商将外发的 IP 做一个反向的 DNS 解释,解释的域名后 MX 的域名一样。
退 回,被投入接收方的垃圾文件夹甚至被直接丢弃掉(即发送和接收方都没有获得拦截通知)。而一般的企业系统的邮件管理员对反垃圾技术并不是非常了解,所以可 以采取的应对措施不多。以下,我们根据反垃圾技术的特点,列举几项优化 邮件系统和操作系统配置的措施,以降低外发邮件被误判的机会。