Email is sent via curl smtp in php
- 2020-05-17 04:59:22
- OfStack
After the first google test, I found many people who asked relevant questions but had no relevant answers. I also found no relevant classes in phpclasses, so I started to try curl while looking at the relevant protocols of stmp
SMTP agreement
You can find a multi-related example on the Internet. You can use telnet to connect to mail server in experiment 1
php test code:
The above is just the php test
Package testing + modification took nearly 6 hours to make the product code fsockopen and curl compatible
Write an smtp class that is compatible with fsockopen and curl to simply send emails
SMTP agreement
You can find a multi-related example on the Internet. You can use telnet to connect to mail server in experiment 1
$ telnet email SMTP Service address 25
Trying Email service IP address ...
Connected to email SMTP Service address .
Escape character is '^]'.
exchange Email server address Microsoft ESMTP MAIL Service ready at Sat, 2 Jun 2012 15:02:12 +0800
EHLO 127.0.0.1
-exchange Email server address Hello [ Email service IP address ]
-SIZE
-PIPELINING
-DSN
-ENHANCEDSTATUSCODES
-X-ANONYMOUSTLS
-AUTH NTLM LOGIN
-X-EXPS GSSAPI NTLM
-8BITMIME
-BINARYMIME
-CHUNKING
-XEXCH50
XRDST
AUTH LOGIN
VXNlcm5hbWU6
The user name (base64_encode)
UGFzc3dvcmQ6
password (base64_encode)
2.7.0 Authentication successful
MAIL FROM: Shipping box address
2.1.0 Sender OK
RCPT TO: Inbox address
2.1.5 Recipient OK
DATA
Start mail input; end with <CRLF>.<CRLF>
Content to send ( There are many related specifications here )
.
2.6.0 <0b476f30-3b96-4e3d-84d2-395a96d34000@exchange Email server address > Queued mail for delivery
QUIT
2.0.0 Service closing transmission channel
Connection closed by foreign host.
php test code:
<?php
header("content-type:text/html;charset=utf-8");
$smtp = array(
"url" => " email SMTP Server address ",
"port" => " email SMTP Server port ", // 1 As for the 25
"username" => " The user name ",
"password" => " password ",
"from" => " Send an address ",
"to" => " Receives an address ",
"subject" => " test 1 Under the title ",
"body" => " test 1 The content of "
);
$CRLF = "\r\n";
$test = "";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $smtp['url']);
curl_setopt($curl, CURLOPT_PORT, $smtp['port']);
curl_setopt($curl, CURLOPT_TIMEOUT,10);
function inlineCode($str){
$str = trim($str);
return $str?'=?UTF-8?B?'.base64_encode($str).'?= ':'';
}
function buildHeader($headers){
$ret = '';
foreach($headers as $k=>$v){
$ret.=$k.': '.$v."\n";
}
return $ret;
}
//
$header = array(
'Return-path'=>'<'.$smtp['from'].'>',
'Date'=>date('r'),
'From'=> '<'.$smtp['from'].'>',
'MIME-Version'=>'1.0',
'Subject'=>inlineCode($smtp['subject']),
'To'=>$smtp['to'],
'Content-Type'=>'text/html; charset=UTF-8; format=flowed',
'Content-Transfer-Encoding'=>'base64'
);
$data = buildHeader($header).$CRLF.chunk_split(base64_encode($smtp['body']));
$content = "EHLO ".$smtp["url"].$CRLF; // First get hello1 Under the
$content .= "AUTH LOGIN".$CRLF.base64_encode($smtp["username"]).$CRLF.base64_encode($smtp["password"]).$CRLF; // Verify landing
$content .= "MAIL FROM:".$smtp["from"].$CRLF; // Send an address
$content .= "RCPT TO:".$smtp["to"].$CRLF; // Receives an address
$content .= "DATA".$CRLF.$data.$CRLF.".".$CRLF; // Send content
$content .= "QUIT".$CRLF; // exit
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl Receive returned data
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $content);
$test = curl_exec($curl);
var_dump($test);
echo "<br/>\r\n";
var_dump($content);
// The end of the
curl_close($curl);
The above is just the php test
Package testing + modification took nearly 6 hours to make the product code fsockopen and curl compatible
Write an smtp class that is compatible with fsockopen and curl to simply send emails