[php]php curl smtp to send email_PHP tutorial

WBOY
Release: 2016-07-13 17:51:56
Original
753 people have browsed it

The company's cloud platform has turned off fsockopen. If you want to use an SMTP external mailbox to send emails, you can only try using curl
I googled first and found a lot of people asking related questions but no relevant answers. I also couldn’t find the relevant classes in phpclasses, so I started to try curl while looking at the relevant protocols of stmp
SMTP protocol
You can find many related examples on the Internet. You can try it yourself by using telnet to connect to the mail server

$ telnet email SMTP service address 25
Trying email service IP address...
Connected to email SMTP service address.
Escape character is '^]'.
220 exchange email server address Microsoft ESMTP MAIL Service ready at Sat, 2 Jun 2012 15:02:12 +0800
EHLO 127.0.0.1
250-exchange email server address Hello [mail service IP address]
250-SIZE
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-X-ANONYMOUSTLS
250-AUTH NTLM LOGIN
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XRDST
AUTH LOGIN
334 VXNlcm5hbWU6
Username(base64_encode)
334 UGFzc3dvcmQ6
Password (base64_encode)
235 2.7.0 Authentication successful
MAIL FROM:Outbox address
250 2.1.0 Sender OK
RCPT TO:Inbox address
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with .
Content to be sent (there are many related specifications here)
.
250 2.6.0 <0b476f30-3b96-4e3d-84d2-395a96d34000@exchange email server address> Queued mail for delivery
QUIT
221 2.0.0 Service closing transmission channel
Connection closed by foreign host.

php test code:

1 2 header("content-type:text/html;charset=utf-8");
3 $smtp = array(
4 "url" => "Email SMTP server address",
5 "port" => "Mailbox SMTP server port", // usually 25
6 "username" => "username",
7 "password" => "password",
8 "from" => "Sending address",
9 "to" => "Receiving address",
10 "subject" => "Test the title",
11 "body" => "Test the content"
12);
13
14 $CRLF = "rn";
15 $test = "";
16 $curl = curl_init();
17
18 curl_setopt($curl, CURLOPT_URL, $smtp['url']);
19 curl_setopt($curl, CURLOPT_PORT, $smtp['port']);
20 curl_setopt($curl, CURLOPT_TIMEOUT,10);
21
22 function inlineCode($str){
23          $str = trim($str);
24          return $str?'=?UTF-8?B?'.base64_encode($str).'?= ':'';
25}
26
27 function buildHeader($headers){
28 $ret = '';
29 foreach($headers as $k=>$v){
30           $ret.=$k.': '.$v."n";
31 }
32 return $ret;
33}
34
35 //
36 $header = array(
37 'Return-path'=>'<'.$smtp['from'].'>',
38 'Date'=>date('r'),
39 'From'=> '<'.$smtp['from'].'>',
40 'MIME-Version'=>'1.0',
41 'Subject'=>inlineCode($smtp['subject']),
42 'To'=>$smtp['to'],
43 'Content-Type'=>'text/html; charset=UTF-8; format=flowed',
44 'Content-Transfer-Encoding'=>'base64'
45 );
46 $data = buildHeader($header).$CRLF.chunk_split(base64_encode($smtp['body']));
47
48
49 $content = "EHLO ".$smtp["url"].$CRLF; // Hello first
50 $content .= "AUTH LOGIN".$CRLF.base64_encode($smtp["username"]).$CRLF.base64_encode($smtp["password"]).$CRLF; // Verify login
51 $content .= "MAIL FROM:".$smtp["from"].$CRLF; // Sending address
52 $content .= "RCPT TO:".$smtp["to"].$CRLF; // Receiving address
53 $content .= "DATA".$CRLF.$data.$CRLF.".".$CRLF; // Send content
54 $content .= "QUIT".$CRLF; // Exit
55
56 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl receives return data
57 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $content);
58 $test = curl_exec($curl);
59 var_dump($test);
60 echo "
rn";
61 var_dump($content);
62
63 // End
64 curl_close($curl);

The above is just the tested php
It took nearly 6 hours of package testing + modification to make the product code compatible with fsockopen and curl

When I have time in the future, I will write an SMTP class that is compatible with fsockopen and curl to simply send emails
think in coding

Excerpted from bluefrog

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/478174.htmlTechArticleThe company’s cloud platform has turned off fsockopen. If you want to use an SMTP external network mailbox to send emails, you can only Try using curl. I googled it first and found a lot of questions asking related questions...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!