我们先来看效果:
直接通过发送消息的方式,让机器人发送相关的标题、内容的邮件,省去了我们打开邮箱客户端的步骤,每个消息段中是以#号相隔。其中第一个发邮件为指令、2551654928@QQ.com是发送到哪里,第一个我爱你是标题,第二个我爱你是内容。
其实现的方法主要是将消息分段成参数,提交给我们的PHP,让PHP发送邮件。使用的是M有QQ框架,地址:https://myqqx.net/
易语言文件:
PHP代码,也就是我易语言中https://www.kekc.cn/email/中index.php的文件(记得修改其中的邮件信息【function send_mail中的】):
<?php
/**
* email smtp (support php7)
*
*/
class Smtp
{
/* Public Variables */
public $smtp_port;
public $time_out;
public $host_name;
public $log_file;
public $relay_host;
public $debug;
public $auth;
public $user;
public $pass;
/* Private Variables */
private $sock;
/* Constractor */
function __construct($relay_host = "", $smtp_port = 80,$auth = false,$user = null,$pass = null)
{
$this->debug = FALSE;
$this->smtp_port = $smtp_port;
$this->relay_host = $relay_host;
$this->time_out = 30; //is used in fsockopen()
$this->auth = $auth;//auth
$this->user = $user;
$this->pass = $pass;
$this->host_name = "localhost"; //is used in HELO command
$this->log_file = "";
$this->sock = FALSE;
}
/* Main Function */
function sendmail($to, $from, $subject, $body, $mailtype, $cc, $bcc, $additional_headers, $fromUser, $replyToAddress)
{
$mail_from = $this->get_address($this->strip_comment($from));
$body = preg_replace("/(^|(/r/n))(/.)/", "/1./3", $body);
$header = "MIME-Version:1.0/r/n";
if($mailtype=="HTML"){
$header .= "Content-Type:text/html; charset=utf-8/r/n";
}
$header .= "To: ".$to."/r/n";
if ($cc != "") {
$header .= "Cc: ".$cc."/r/n";
}
$header .= "From: $fromUser<".$from.">/r/n";
$header .= "Subject: ".$subject."/r/n";
$header .= "Reply-To: ".$replyToAddress."/r/n";
$header .= $additional_headers;
$header .= "Date: ".date("r")."/r/n";
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")/r/n";
list($msec, $sec) = explode(" ", microtime());
$header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">/r/n";
//若需要开启邮件跟踪服务,请使用以下代码设置跟踪链接头。前置条件和约束见文档"如何开启数据跟踪功能?"
//$header .= "Content-Transfer-Encoding: quoted-printable/r/n";
//$header .= "X-AliDM-Trace: ". base64_encode(json_encode(['TagName'=>'用户创建的Tag','OpenTrace'=>"1"]))."/r/n";
$TO = explode(",", $this->strip_comment($to));
if ($cc != "") {
$TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
}
if ($bcc != "") {
$TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
}
$sent = TRUE;
foreach ($TO as $rcpt_to) {
$rcpt_to = $this->get_address($rcpt_to);
if (!$this->smtp_sockopen($rcpt_to)) {
$this->log_write("Error: Cannot send email to ".$rcpt_to."/n");
$sent = FALSE;
continue;
}
if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
$this->log_write("E-mail has been sent to <".$rcpt_to.">/n");
} else {
$this->log_write("Error: Cannot send email to <".$rcpt_to.">/n");
$sent = FALSE;
}
fclose($this->sock);
$this->log_write("Disconnected from remote host/n");
}
return $sent;
}
/* Private Functions */
function smtp_send($helo, $from, $to, $header, $body = "")
{
if (!$this->smtp_putcmd("HELO", $helo)) {
return $this->smtp_error("sending HELO command");
}
//auth
if($this->auth){
if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {
return $this->smtp_error("sending HELO command");
}
if (!$this->smtp_putcmd("", base64_encode($this->pass))) {
return $this->smtp_error("sending HELO command");
}
}
if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")) {
return $this->smtp_error("sending MAIL FROM command");
}
if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")) {
return $this->smtp_error("sending RCPT TO command");
}
if (!$this->smtp_putcmd("DATA")) {
return $this->smtp_error("sending DATA command");
}
if (!$this->smtp_message($header, $body)) {
return $this->smtp_error("sending message");
}
if (!$this->smtp_eom()) {
return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
}
if (!$this->smtp_putcmd("QUIT")) {
return $this->smtp_error("sending QUIT command");
}
return TRUE;
}
function smtp_sockopen($address)
{
if ($this->relay_host == "") {
return $this->smtp_sockopen_mx($address);
} else {
return $this->smtp_sockopen_relay();
}
}
function smtp_sockopen_relay()
{
$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."/n");
$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
if (!($this->sock && $this->smtp_ok())) {
$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."/n");
$this->log_write("Error: ".$errstr." (".$errno.")/n");
return FALSE;
}
$this->log_write("Connected to relay host ".$this->relay_host."/n");
return TRUE;
}
function smtp_sockopen_mx($address)
{
$domain = preg_replace("/^.+@([^@]+)$/", "/1", $address);
if (!@getmxrr($domain, $MXHOSTS)) {
$this->log_write("Error: Cannot resolve MX /"".$domain."/"/n");
return FALSE;
}
foreach ($MXHOSTS as $host) {
$this->log_write("Trying to ".$host.":".$this->smtp_port."/n");
$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
if (!($this->sock && $this->smtp_ok())) {
$this->log_write("Warning: Cannot connect to mx host ".$host."/n");
$this->log_write("Error: ".$errstr." (".$errno.")/n");
continue;
}
$this->log_write("Connected to mx host ".$host."/n");
return TRUE;
}
$this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")/n");
return FALSE;
}
function smtp_message($header, $body)
{
fputs($this->sock, $header."/r/n".$body);
$this->smtp_debug("> ".str_replace("/r/n", "/n"."> ", $header."/n> ".$body."/n> "));
return TRUE;
}
function smtp_eom()
{
fputs($this->sock, "/r/n./r/n");
$this->smtp_debug(". [EOM]/n");
return $this->smtp_ok();
}
function smtp_ok()
{
$response = str_replace("/r/n", "", fgets($this->sock, 512));
$this->smtp_debug($response."/n");
if (!preg_match("/^[23]/", $response)) {
fputs($this->sock, "QUIT/r/n");
fgets($this->sock, 512);
$this->log_write("Error: Remote host returned /"".$response."/"/n");
return FALSE;
}
return TRUE;
}
function smtp_putcmd($cmd, $arg = "")
{
if ($arg != "") {
if($cmd=="") $cmd = $arg;
else $cmd = $cmd." ".$arg;
}
fputs($this->sock, $cmd."/r/n");
$this->smtp_debug("> ".$cmd."/n");
return $this->smtp_ok();
}
function smtp_error($string)
{
$this->log_write("Error: Error occurred while ".$string."./n");
return FALSE;
}
function log_write($message)
{
$this->smtp_debug($message);
if ($this->log_file == "") {
return TRUE;
}
$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {
$this->smtp_debug("Warning: Cannot open log file /"".$this->log_file."/"/n");
return FALSE;
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);
return TRUE;
}
function strip_comment($address)
{
$comment = "//([^()]*/)/";
while (preg_match($comment, $address)) {
$address = preg_replace($comment, "", $address);
}
return $address;
}
function get_address($address)
{
$address = preg_replace("/([ /t/r/n])+/", "", $address);
$address = preg_replace("/^.*<(.+)>.*$/", "/1", $address);
return $address;
}
function smtp_debug($message)
{
if ($this->debug) {
echo $message;
}
}
}
header('content-type:application/json;charset=utf-8');
function curlget($url,$method='get',$data=null){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
curl_setopt($ch, CURLOPT_TIMEOUT, 500);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if($method=='post'){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
}
$result = curl_exec($ch);
curl_close($ch);
if(!$result){
//curl 出现错误
return false;
}
return $result;
}
//发送邮件 宝塔邮件系统发送
function send_mail($email,$subject,$content){
$mailto=$email;
$mailsubject=$subject;
$mailbody=$content;
$smtpserver = "ssl://smtp.qiye.aliyun.com";
$smtpserverport = 465;
// $smtpserver= "ssl://smtpdm.aliyun.com";
// $smtpserverport = 465;
$smtpusermail = "kapi@mail.yinjiangbi.cn";
// 发件人的账号,填写控制台配置的发信地址,比如xxx@xxx.com
$smtpuser = "kapi@mail.yinjiangbi.cn";
// 访问SMTP服务时需要提供的密码(在控制台选择发信地址进行设置)
$smtppass = "密码";
$mailsubject = "=?UTF-8?B?" . base64_encode($mailsubject) . "?=";
$mailtype = "HTML";
//可选,设置回信地址
$smtpreplyto = "yinjiangbi@qq.com";
$smtp = new smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);
$smtp->debug = false;
$cc ="";
$bcc = "";
$additional_headers = "";
//设置发件人名称,名称用户可以自定义填写。
$sender = "kapi";
$res = $smtp->sendmail($mailto,$smtpusermail, $mailsubject, $mailbody, $mailtype, $cc, $bcc, $additional_headers, $sender, $smtpreplyto);
if($res == true){
return true;
}else{
return false;
}
}
$email = $_REQUEST['email'];
$subject = $_REQUEST['subject'];
$sendornot['code'] = htmlspecialchars($_REQUEST['code']);
$content = $sendornot['code'] . '<br>投诉反馈,请发送邮件至yinjiangbi@qq.com。';
//黑名单,禁止发送
$hei = array(
'bbkkb666666@163.com',
'10001@qq.com',
'yinjiangbi@qq.com'
);
$isin = in_array($email,$hei);
if($isin){//在黑名单中!
//echo "in====".$isin;
exit(json_encode(['result' => 0, 'msg' => "该邮箱已被禁止发送!", 'toemail' => $email, 'code' => $sendornot['code']], JSON_UNESCAPED_UNICODE));
}
$res = @send_mail($email, $subject, $content);
if(!$email or !$sendornot['code']){
exit(json_encode(['result' => 0, 'msg' => "提交信息错误!", 'toemail' => $email, 'code' => $sendornot['code']], JSON_UNESCAPED_UNICODE));
}
if($res == true){
//echo "邮件发送成功";
exit(json_encode(['result' => 1, 'msg' => "email发送成功!", 'toemail' => $email, 'code' => $sendornot['code']], JSON_UNESCAPED_UNICODE));
}elseif($res == false){
exit(json_encode(['result' => 0, 'msg' => "email发送失败!", 'toemail' => $email, 'code' => $sendornot['code']], JSON_UNESCAPED_UNICODE));
}
感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
暂无评论内容