不使用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 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

3338
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3705
来自专栏杨龙飞前端

scrollto 到指定位置

2994
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

39510
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

3025
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

7416
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

8908
来自专栏落花落雨不落叶

canvas画简单电路图

88811
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

5667
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.5K7

扫码关注云+社区