xml地图|网站地图|网站标签 [设为首页] [加入收藏]

阿里云服务器使用SMTP发送邮件,发送电子邮件

来源:http://www.ccidsi.com 作者:集成经验 人气:54 发布时间:2020-01-30
摘要:在接收时自己将法定给出的PHP的代码复制进去,运维时只怕出错(访谈smtp服务器超时)。后来查了种种资料才意识Ali云出于安全的思考,将25号端口关闭了(教程给的正是25号端口)。

在接收时自己将法定给出的PHP的代码复制进去,运维时只怕出错(访谈smtp服务器超时)。后来查了种种资料才意识Ali云出于安全的思考,将25号端口关闭了(教程给的正是25号端口)。实际中应用SSL协议,对应SMTP端口正是465,将端口改掉,同一时间在smtp服务器地址前加ssl://即可:

class Mailer{ private $host; private $port = 25; private $user; private $pass; private $debug = false; private $sock; public function __construct($host,$port,$user,$pass,$debug = false) { $this->host = $host; $this->port = $port; $this->user = base64_encode; //用户名密码一定要使用base64编码才行 $this->pass = base64_encode; $this->debug = $debug; //socket连接 $this->sock = fsockopen($this->host,$this->port); if{ exit; } //读取smtp服务返回给我们的数据 $response = fgets; $this->debug; //如果响应中有220返回码,说明我们连接成功了 if(strstr === false){ exit; } }//发送SMTP指令,不同指令的返回码可能不同 public function execCommand{ fwrite; $response = fgets;//输出调试信息 $this->debug('cmd:'.$cmd .';response:'.$response); if(strstr($response,$return_code) === false){ return false; } return true; } public function sendMail($from,$to,$subject,$body){//detail是邮件的内容,一定要严格按照下面的格式,这是协议规定的 $detail = 'From:'.$from."rn"; $detail .= 'To:'.$to."rn"; $detail .= 'Subject:'.$subject."rn"; $detail .= 'Content-Type: Text/html;'."rn"; $detail .= 'charset=gb2312'."rnrn"; $detail .= $body; $this->execCommand("HELO ".$this->host."rn",250); $this->execCommand; $this->execCommand($this->user."rn",334); $this->execCommand($this->pass."rn",235); $this->execCommand("MAIL FROM:rn",250); $this->execCommand("RCPT TO:rn",250); $this->execCommand; $this->execCommand($detail."rn.rn",250); $this->execCommand; } public function debug{ if{ echo 'Debug:'.$message . PHP_EOL .''; } } public function __destruct() { fclose; }}

$port = 25;$user = 'username'; //请替换成你自己的smtp用户名$pass = 'pass'; //请替换成你自己的smtp密码$host = 'smtp.163.com';$from = 'xxxxx@163.com'; $to = 'xxxx@qq.com';$body = 'hello world';$subjet = '我是标题';$mailer = new Mailer($host,$port,$user,$pass,true);$mailer->sendMail($from,$to,$subjet,$body);

从远古的八百里加急,到现行反革命的电子邮件,邮件的发展见证了前后七千年的发展史,那么些自然是废话,只是要说说邮件的首要。

<?php//该文件名为 sendemailPHPMail.php/* use PHPMailerPHPMailerPHPMailer;use PHPMailerPHPMailerException;require 'php/Exception.php';require 'php/PHPMailer.php';require 'php/SMTP.php'; */include_once "class.phpmailer.php"; include_once "class.smtp.php"; //include_once "Exception.php";//获取一个外部文件的内容 $mail=new PHPMailer(); ///$send_name=$_POST['name'];$send_phone=$_POST['phone'];$send_theme=$_POST['theme'];$send_kind=$_POST['kind'];$mailcontent = "姓名昵称: ".$send_name."<br>电话邮箱: ".$send_phone."<br>用途: ".$send_theme."<br>风格: ".$send_kind."<br>内容: ".$_POST['content'];//邮件内容/////设置smtp参数 $mail->IsSMTP(); $mail->SMTPAuth=true; $mail->SMTPKeepAlive=true; $mail->Host="ssl://smtp.163.com"; $mail->Port=465; //填写你的email账号和密码 $mail->Username="****@163.com"; $mail->Password="****";#注意这里要填写授权码就是我在上面网易邮箱开启SMTP中提到的,不能填邮箱登录的密码哦。 //设置发送方,最好不要伪造地址 $mail->From="***@163.com"; $mail->FromName="***";//发送者用户名 $mail->Subject="****";//邮件标题 $mail->AltBody=$mailcontent; //邮件内容$mail->WordWrap=50; // set word wrap $mail->MsgHTML($mailcontent); //设置回复地址 $mail->AddReplyTo("****@163.com","***"); //设置邮件接收方的邮箱和姓名 $mail->AddAddress("***@qq.com","**");//接收者邮箱和用户名 //使用HTML格式发送邮件 $mail->IsHTML; //通过Send方法发送邮件 //根据发送结果做相应处理 if(!$mail->Send{ //echo "Mailer Error:".$mail->ErrorInfo; echo "<meta charset="UTF-8">"; echo "<script language="JavaScript">rn"; echo " alert("对不起,邮件发送失败!!请充实");rn"; echo " history.back();rn"; echo "</script>"; exit; exit(); }else{ echo "<meta charset="UTF-8">"; echo "<script language="JavaScript">rn"; echo " alert("发送成功!!");rn"; echo " history.back();rn"; echo "</script>"; exit; } ?>

对方会重临给我们四个250 OK

2.3. 发送HTML格式的文件

在地方的开始和结果中,大家已经观看了,发送邮件的内容,是经过MIMEText(卡塔尔国函数进行标准的,若是设置了plain选料表示发送文书邮件,假使大家设置html纵使发送的HTML格式的邮件,HTML标签须求被深入分析出来,请上干货:

import email, smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr

# 定义连接邮箱服务器的信息
smtp_server = "smtp.qq.com"
smtp_user = "1007821300@qq.com"
smtp_pass = "kyecgawxkkupbegh"

# 设置发件人、收件人
sender = smtp_user
receiver = "muwenbin@qikux.com"


# 设置对发件人、收件人格式化处理的方法
def _format_addr(user):
    name, addr = parseaddr(user)
    return formataddr((Header(name, "utf-8").encode(), addr))


# 设置连接邮箱服务器
server = smtplib.SMTP_SSL(smtp_server)
# 登录账号
server.login(smtp_user, smtp_pass)
# 设置邮箱标题、发件人、收件人、内容信息
msg = MIMEText("<h1>Hello 你好</h1>这是一封自动发送的测试邮件", "html", "utf-8")
msg["subject"] = Header("来自大牧莫邪的问候")
msg["from"] = _format_addr("大牧莫邪 <%s>" % sender)
msg["to"] = _format_addr("木木 <%s>" % receiver)
# 发送邮件
server.sendmail(sender, receiver, msg.as_string())
print("邮件发送完成")

邮件发送实现,收件箱中查阅邮件

出殡HTML格式的邮件

此地有人也许会有标题,何人TM没事干,写三个邮件写那么多的HTML标签步向呀,它疯了哟!

这里须要给我们广泛一个前端的知识点,大家平时在网页中输入内容时,会增添富文本编辑器,如百度的UEditor,富文本编辑器中会带多姿多彩的格式,那些格式底层其实正是HTML标签,我们将客商在富文本编辑器中写的剧情开展发送的时候,发送的便是HTML格式的公文数据

百度富文本框在线演示地址


在Ali云上买了贰个轻量应用服务器,之所以选拔那个是因为该项目标服务器能够在选购时安顿开采条件,何况价格比较便利。将网址在本土搭好上传到云上时,开掘原先能够运行的邮件发送作用失效了。折腾了相近一天之后,才察觉难题所在,这里记录一下。

出于smtp公约对邮件内容格式有严酷的渴求,在命令行中倒霉实践,所以这里没有将全方位经过施行达成,前面会使用php代码完整兑现。

出殡邮件【本文讲明】

点击下载class.phpmailer.phpclass.smtp.php文件。(提取密码为:x6at)前端代码为:

上述正是本文的全部内容,希望对我们的就学抱有利于,也冀望我们多多关照脚本之家。

附录:平淡无奇发送邮件服务器

| 邮箱|smtp服务器 |端口|
常用的邮箱服务器(SMTP、POP3)地址、端口
sina.com:
POP3服务器地址:pop3.sina.com.cn(端口:110)
SMTP服务器地址:smtp.sina.com.cn(端口:25)

sinaVIP:
POP3服务器:pop3.vip.sina.com (端口:110)
SMTP服务器:smtp.vip.sina.com (端口:25)

sohu.com:
POP3服务器地址:pop3.sohu.com(端口:110)
SMTP服务器地址:smtp.sohu.com(端口:25)

126邮箱:
POP3服务器地址:pop.126.com(端口:110)
SMTP服务器地址:smtp.126.com(端口:25)

139邮箱:
POP3服务器地址:POP.139.com(端口:110)
SMTP服务器地址:SMTP.139.com(端口:25卡塔尔

163.com:
POP3服务器地址:pop.163.com(端口:110)
SMTP服务器地址:smtp.163.com(端口:25)

QQ邮箱
POP3服务器地址:pop.qq.com(端口:110)
SMTP服务器地址:smtp.qq.com (端口:25)

QQ公司邮箱
POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995)
SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:587/465)

yahoo.com:
POP3服务器地址:pop.mail.yahoo.com
SMTP服务器地址:smtp.mail.yahoo.com

yahoo.com.cn:
POP3服务器地址:pop.mail.yahoo.com.cn(端口:995)
SMTP服务器地址:smtp.mail.yahoo.com.cn(端口:587

HotMail
POP3服务器地址:pop3.live.com (端口:995)
SMTP服务器地址:smtp.live.com (端口:587)

gmail(google.com)
POP3服务器地址:pop.gmail.com(SSL启用 端口:995)
SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)

263.net:
POP3服务器地址:pop3.263.net(端口:110)
SMTP服务器地址:smtp.263.net(端口:25)

263.net.cn:
POP3服务器地址:pop.263.net.cn(端口:110)
SMTP服务器地址:smtp.263.net.cn(端口:25)

x263.net:
POP3服务器地址:pop.x263.net(端口:110)
SMTP服务器地址:smtp.x263.net(端口:25)

21cn.com:
POP3服务器地址:pop.21cn.com(端口:110)
SMTP服务器地址:smtp.21cn.com(端口:25)

Foxmail:
POP3服务器地址:POP.foxmail.com(端口:110)
SMTP服务器地址:SMTP.foxmail.com(端口:25)

china.com:
POP3服务器地址:pop.china.com(端口:110)
SMTP服务器地址:smtp.china.com(端口:25)

tom.com:
POP3服务器地址:pop.tom.com(端口:110)
SMTP服务器地址:smtp.tom.com(端口:25)

etang.com:
POP3服务器地址:pop.etang.com
SMTP服务器地址:smtp.etang.com


大牧赤霄.png

<?phprequire 'email.class.php';$mailto='***';$mailsubject="测试邮件";$mailbody='这里是邮件内容';$smtpserver = "smtpdm.aliyun.com";$smtpserverport = 25;$smtpusermail = "***";$smtpuser = "***";$smtppass = "***";$mailsubject = "=?UTF-8?B?" . base64_encode($mailsubject) . "?=";$mailtype = "HTML";$smtp = new smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);$smtp->debug = false;$smtp->sendmail($mailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);

末端大家会再输入大家的客商名,密码,发送邮件的开始和结果,发赠给外人,选取人等新闻,然后结束对话,smtp服务器就能够帮大家把邮件发送出去。

2.5. 邮件中展现的图样

设若大家要在邮件中拉长展现的图形应该如何做呢~

规行矩步大家如常的精通,能够经过将邮件内容改造为HTML,那样的话,图片就足以由此

图片 1

标签插入步向了,难道不是吗?

邮件服务商们开采了五个难点,倘诺在邮件中能够专断增添链接的话,十分轻松让邮件作为一个犯案的桥梁,把针对恶意网站依旧服务的超链接带入我们的PC,所以常规状态下,邮件中会自动屏蔽带外链接图片的。

那应该如何是好呢?

其实邮件中的图片在python中管理的比较简单,邮件中须求的图片,通过附属类小构件的方式上传到邮件服务器,然后依据附属类小构件的逐意气风发使用cid:num增进就足以了,语法相通![](cid:0)那是在正文中利用附属类小零件中的第二个图片

上干货:

# 导入需要的模块
import email, smtplib
from email                  import encoders
from email.utils            import parseaddr, formataddr
from email.header           import Header
from email.mime.base        import MIMEBase
from email.mime.text        import MIMEText
from email.mime.multipart   import MIMEMultipart

# 定义连接邮箱服务器的信息
smtp_server = "smtp.qq.com"
smtp_user = "xxxxxxxxx@qq.com"
smtp_pass = "qq用户如果设置了安全验证,这里请填写您的授权码"

# 设置发件人、收件人
sender = smtp_user
receiver = "xxxxxx@xxxx.com"


# 设置收件人,发件人格式的方法
def _format_addr(user):
    name, addr = parseaddr(user)
    return formataddr((Header(name, "utf-8").encode(), addr))


# 连接服务器
server = smtplib.SMTP_SSL(smtp_server)
# 登录服务器
server.login(smtp_user, smtp_pass)

# 设置邮件内容[可以包装邮件内容和附件的MIMEMultipart对象]
msg = MIMEMultipart()
msg["subject"] = Header("来自大牧的问候", "utf-8")
msg["from"] = _format_addr("大牧来了 <%s>" % sender)
msg["to"] = _format_addr("牟文斌 <%s>" % receiver)

# 1.设置邮件正文内容
content = MIMEText("<h2>这是邮件正文内容部分</h2>![](cid:0)", "html", "utf-8")
# 将正文内容添加到包装对象中
msg.attach(content)

# 2.设置附件内容<使用本地的图片作为附件>
with open("d:/my.jpg", "rb") as f:
    # 设置MIMEBase对象包装附件
    attachment = MIMEBase("image", "jpg", filename="header.jpg")
    # 设置附件信息
    attachment.add_header("Content-Disposition", "attachment", filename="header.jpg")
    attachment.add_header("Content-ID", "<0>")
    attachment.add_header("X-Attachment-Id", "0")
    # 读取附件内容
    attachment.set_payload(f.read())
    # 编码文件
    encoders.encode_base64(attachment)
    # 添加附件到包装对象中
    msg.attach(attachment)

# 发送邮件
server.sendmail(sender, receiver, msg.as_string())
print("邮件发送成功")

上述代码试行实现后,在大家的收件箱中,赤果果个的就现身了上边包车型客车结果

邮件正文内容中选择图片


和平提醒:以上代码都是小编使用QQ邮箱实行测量检验进程中总括的材质,要是大家在利用其余邮箱进行认证的过程中冒出了难题,款待留言一齐钻探哦!


$smtpserver = "ssl://smtpdm.aliyun.com";$smtpserverport = 465;
Trying 220.181.12.16...Connected to smtp.163.com.Escape character is '^]'.220 163.com Anti-spam GT for Coremail System 

1. 电子邮件的传导进程

咱俩想起一下守旧的邮件的出殡过程(说白了正是写信),写信的进度如下图所示:

邮件投递进程

写好信件 -> 投递到邮筒 -> 邮局揽收全体的邮件 -> XX地区邮局 -> 传送到XX地区邮局 -> 投递 -> 个人邮箱 -> 看见信件

电子邮件的传输进程和历史观的格局有一点点相似,也是大家和煦有写邮件的电子邮件软件,写好的邮件点击发送,发送到邮件服务器,某邮件服务器将邮件通过互连网传递到另叁个邮件服务器,邮件服务器将邮件投递到对象客商的投递服务区,指标客商从投递服务区收到邮件。

电子邮件发送流程及术语解释
邮件发送管理进度:客户A发送邮件给顾客B/C/D

客商邮件发送管理进度

术语解释:

MUA:Mail User Agent,邮件客户代理,我们得以归纳的精通成我们使用的出殡邮件的软件,如Foxmail、outlook、gmail等等,这样的软件能够编写邮件,发送/收取邮件

MTA:Mail Transfer Agent,邮件传输代理,大家经常状态下,注册的信箱都是归于某一个运转商的,如xx@qq.com那是Tencent的邮箱、xx@163.com那是天涯论坛的信箱等等,平时运转商会有和好的服务器特地用于邮件的互联网传输的,这里的MTA指代的纵然运转商业服务业务器

MDA:Mail Delivery Agent,邮件投递代理,大家发送的邮件,会私下认可保存在指标服务器中的投递服务区,须要指标顾客从投递服务区中领取邮件(收取邮件)。

完了流程如下
邮件 -> MUA -> MTA -> ... n个MTA -> MDA <- MUA <- 邮件

那大家前后相继中,假使要达成出殡和安葬邮件和选用邮件的效应,就要求团结支付顺序完结从MUA-> MTA发送的历程来产生发邮件的法力;相像须求完结从MUA->MDA收取邮件的进程一挥而就收邮件的效能

Ali云在扶持中提供了SMTP发邮件的事必躬亲程序,各类语言的本子都有,很全面:

SMTP协议

可寻常的通信花招比较,特别是在当今,电话、QQ、Wechat等等各个应酬软件的兴起,比古板的邮件和前些天的电子邮件都急速了不菲;那怎么电子邮件如故显得那么首要吗~

<form name="frmEmail" action="./php/sendemailPHPMail.php" method="post"> <div > <input name="name" type="text" placeholder="姓名昵称" /> <input name="phone" type="text" placeholder="电话or邮箱" /> <input name="theme" type="text" placeholder="用途" /> <input name="kind" type="text" placeholder="风格" /> </div> <div > <textarea name="content">内容</textarea> </div> <div > </div><br /> <input type="submit" onClick="toOutLook()" value="提交" /> </form>

再试行AUTH LOGIN告诉对方大家要起来展开身份认证,然后对方会答应大家有些消息。

2. SMTP发送邮件

smtp是出殡和安葬邮件的生龙活虎种司空见惯的商议,python已经松开了smtp合同的帮忙,可以发送常规的邮件内容(文本、附属类小零部件、网页等)

图片 2image.png

地点大家利用telnet连接smtp服务时,输入了生龙活虎部分HELO ,AUTH LOGIN等,咱们兴许会有疑点那么些是何许。

2.1. 模块简要介绍

在邮件发送模块中,首要行使如下八个模块进行拍卖

  • email模块:用于营造电子邮件对象的劳务模块
  • smtplib模块:用于电子邮件发送的劳务模块

接下去,大家先领会一个轻松的邮件发送程序

import email,smtplib
from email.mime.text import MIMEText
# 发送邮件服务器
smtp_server = "smtp.qq.com"
# 邮箱账号 密码
email_user = "xxxxxxxxx@qq.com"
email_pass = "qq用户请填写授权码"

# 发件人收件人信息
sender = email_user
receiver = "xxxxxx@xxxx.com"

# 发送的消息设置,plain表示文本,utf-8表示数据编码格式
msg = MIMEText("这是一份自动发送的测试邮件", "plain", "utf-8")

# 连接邮件服务器,用户登录, 发送邮件
server = smtplib.SMTP_SSL(smtp_server, 465)
server.set_debuglevel(1)
server.login(email_user, email_pass)
server.sendmail(sender, receiver, msg.as_string())
server.quit();
print("邮件发送结束")

上述代码是经过qq邮箱发送邮件的案例
行使QQ邮箱发送邮件时必要小心,即便平常状态下,须要张开smtp等劳动,然后使用科学的记名账号和登陆密码,假若风流倜傥旦设置了QQ安全为重之类的,就要求经过设置授权码进行登陆

开采网页版QQ邮箱,步入[设置]选项->进入[账户]分选,操作如下内容:

QQ邮箱发送邮件设置注意事项

设置完上述剧情之后,运路程序,我们在目的邮箱中就选用了对应的邮件

经受到的邮件内容


骨子里中网址选取PHPMail进行邮件的发送。代码如下:

telnet举办邮件发送

电子邮件,最近的话在分歧的行业中依然攻克着这些重大的办公室供给的身份的,常规状态下公司的任务分配、沟通、同盟等等都是经过电子邮件举行管理的;同一时候,电子邮件笔者的作用【邮件发送、群发、抄送、附属类小构件】让它特别社和相比规范的办公室场合和平日十分大数指标联络;所以电子邮件的操作在各个编制程序语言中都有涉嫌和扩充;也是大家必需调整的才能之生龙活虎

被合法教程给坑了弹指间,下一次要留意。这里Mark一下/。

下一场会收获以下结果,表明大家总是成功了

抽出邮件【下黄金时代节执教】

里头PHP的代码如下:

然后SMTP服务器遵照那组准绳来深入分析大家发送的新闻,最后实行邮件发送。像163,qq等邮件服务器都有提供SMTP服务,大家假诺连接上她们的SMTP服务器,然后write数据,就会贯彻邮件发送了。

2.2. 发送完整邮件

地方的邮件大家早就看出来了,在收件箱中观望的邮件,只是包罗了发件人邮箱和邮件的文件内容;邮件的标题、发件人名称、收件人名称、邮件的格式等等都不曾开展拍卖。
在python的email模块中,能够透过安装Subject安装邮箱标题,设置From安装发件人新闻,设置To安装收件人新闻

常备意况下,我们会将标题中的中文,使用email.header模块中的Header(State of Qatar方法实行编码以保证数据传输的没有错;
在正规邮箱处理进程中,收件人和发件人那八个消息的体现格式是相像于姓名 <xxxx@mail.com>像这种类型的格式,这种格式在python中经过email.utils模块中的parseaddr()方法和formataddr()办法开展管理的

# 导入需要的模块
import email, smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr

# 定义连接邮箱服务器的信息
smtp_server = "smtp.qq.com"
smtp_user = "xxxxxxxx@qq.com"
smtp_pass = "qq用户如果设置了安全策略的话这里要写授权码"

# 设置发件人、收件人
sender = smtp_user
receiver = "xxxxxx@xxxx.com"

# 定义用于编码发件人和收件人格式的方法
def _format_addr(user):
    name, addr = parseaddr(user)
    return formataddr((Header(name, "utf-8").encode(), addr))

# 开始发送邮件
# 连接服务器
server = smtplib.SMTP_SSL(smtp_server, 465)
# 登录服务器
server.login(smtp_user, smtp_pass)
# 设置内容,标题,发件人,收件人
msg = MIMEText("这是一个自动发送的邮件", "plain", "utf-8")
msg["subject"] = Header("来自大牧莫邪的问候")
msg["from"] = _format_addr("大牧莫邪 <%s>" % sender)
msg["to"] = _format_addr("牟文斌 <%s>" % receiver)
# 发送邮件
server.sendmail(sender, receiver, msg.as_string())
print("邮件发送成功")

能够见见,上边的代码中,大家对标题进行了编码设置,对发件人和收件人的格式实行了管理;[专一:以往的邮箱服务器,某个情形下不通过Header编码也能够不荒谬识别中文,然而大家照旧在代码中张开标准,幸免现身中文乱码的BUG]
没有错选取邮件:

科学接纳到含有标题、发件人、收件人等新闻的邮件


本文由68399皇家赌场发布于集成经验,转载请注明出处:阿里云服务器使用SMTP发送邮件,发送电子邮件

关键词: 68399皇家赌场 服务器 之家 实例 阿里

上一篇:可用于你的下一个项目,API开发框架

下一篇:没有了

最火资讯