不使用smtp直接发送邮件

用smtp发邮件挺蛋疼的,不是有配额限制就是有配额限制.所以我觉得应该有直接发送邮件的办法.回归到用命令行装逼的年代,我们是这样发信的:

C:\>nslookup
默认服务器:  google-public-dns-a.google.com
Address:  8.8.8.8
> set type=mx
> qq.com
服务器:  google-public-dns-a.google.com
Address:  8.8.8.8
非权威应答:
qq.com  MX preference = 10, mail exchanger = mx3.qq.com
qq.com  MX preference = 20, mail exchanger = mx2.qq.com
qq.com  MX preference = 30, mail exchanger = mx1.qq.com
C:\>telnet mx3.qq.com 25
220 newmx13.qq.com MX QQ Mail Server
HELO localhost
250 newmx13.qq.com
MAIL FROM:<eslizn@localhost>
250 Ok
RCPT TO:<10000@qq.com>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
hello!
.
550 Mail content denied. //service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000726
QUIT

虽然邮件没有发送成功,但是是因为被过滤了,最好做下spf以及写全邮件头信息. 显然,我们可以利用程序模拟这个过程:

function realmail($to,$subject,$message,$from,$type="text/plain"){
    $rule="/([a-zA-Z0-9-.]+)\@([a-zA-Z0-9-.]+)/i";
    if(!pregmatch($rule,$to,$to) || !pregmatch($rule,$from,$from)){
        return false;
    }
    if (!getmxrr($to[2],$mx)){
        return false;
    }
    $message = array(
        "MIME-Version: 1.0",
        "X-Mailer: Xmailer",
        "Delivered-To: {$to[0]}",
        "From: {$from[1]} <{$from[0]}>",
        "To: {$to[1]} <{$to[0]}>",
        "Date: ".date("D, t F Y H:i:s O"),
        "Content-Type: {$type}; charset=UTF-8",
        "Content-Transfer-Encoding: base64",
        "Subject: =?UTF-8?B?".base64encode($subject)."?=",
        "",
        base64encode($message)
    );
    $cmds=array(
        "HELO {$from[2]}",
        "MAIL FROM:<{$from[0]}>",
        "RCPT TO:<{$to[0]}>",
        "DATA",
        implode("\r\n",$message)."\r\n.\r\n",
        "QUIT"
    );
    $fp=fsockopen(current($mx),25);
    foreach($cmds as $val){
        fwrite($fp,$val."\r\n");
        fgets($fp);
    }
    fclose($fp);
    return true;
}

这样就不用给smtp跪舔了,邮件想发就发

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张绍文的专栏

基于 TLS 1.3的微信安全通信协议 mmtls 介绍(下)

随着近些年网络安全事情的频繁发生,使得用户对网络通信安全的意识越来越强。国内外的网络服务提供商都逐渐提供全站的安全通信服务,如国内的淘宝、百度先后宣布已经完成了...

1.4K1
来自专栏Linux运维学习之路

https原理及实践

转载请注明出处 安全知识 网络安全问题 数据机密性 在网络传输数据信息时,对数据的加密是至关重要的,否则所有传输的数据都是可以随时被第三方看到,完全没有机密性可...

4249
来自专栏逸鹏说道

小侃 SQL加密和性能

细说SQL Server中的加密 简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程。在SQL Server中,加密并不能替代其他的安全设置,比如...

3116
来自专栏FreeBuf

一封伪造邮件引发的“探索”(涉及钓鱼邮件、SPF和DKIM等)

0x00. 引言 我用swaks 发送一封以我们公司CTO为显示发件人(腾讯企业邮箱)的伪造邮件给我的一个同事,邮件的内容就是让这位同事去CTO的办公司一趟,没...

1K6
来自专栏Golang语言社区

Go语言·Web调优详解

Go1.8将要来了,这种格局即将被打破了! 我们最近尝试性的将Go1.8编译的服务暴漏到了外网,结果发现crypto/tls 和net/http都得到了极大的提...

3699
来自专栏狂码一生

QT新建文件、打开文件、保存文件

1463
来自专栏北京马哥教育

openssl创建CA、申请证书及其给web服务颁发证书

一、创建私有的CA 1)查看openssl的配置文件:/etc/pki/tls/openssl.cnf ? 2)创建所需的文件 touch /etc/pki...

4185
来自专栏Java架构沉思录

深入浅出密码学(中)

前言 在之前的文章《深入浅出密码学(上)》中,笔者为大家简要介绍了密码学中的加密跟单向散列函数的概念与应用。在这里先简单回顾下,由于网络通信过程中存在信息被窃听...

3589
来自专栏一“技”之长

深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求(上)

    本篇博客主要讨论如何在客户端与服务端之间进行HTTPS网络传输,为了深入理解网络传输的基础原理,更加灵活的校验证书,博客的前半部分也将介绍一些HTTPS...

1495
来自专栏安智客

密码技术之消息认证码

上一节我们知道消息的完整性保护需要通过单向散列函数来保证。但是光完整性还不够,我们还有确认消息的来源必须是正确的发送者。

1705

扫码关注云+社区