Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何通过SMTP与邮件服务器通信?_Php_Smtp - Fatal编程技术网

PHP:如何通过SMTP与邮件服务器通信?

PHP:如何通过SMTP与邮件服务器通信?,php,smtp,Php,Smtp,如何使用PHP通过SMTP与邮件服务器通信?查找mail()文档。查看。使用打开套接字。使用写入套接字。使用或逐字节使用逐行读取套接字。可能您正在查找以下内容: 这些示例使用Pear邮件包: http://www.cyberciti.biz/tips/howto-php-send-email-via-smtp-authentication.html看看Zend_Mail它拥有处理邮件所需的所有功能 -http://framework.zend.com -http://framework.ze

如何使用PHP通过SMTP与邮件服务器通信?

查找mail()文档。

查看。

使用打开套接字。使用写入套接字。使用或逐字节使用逐行读取套接字。

可能您正在查找以下内容:

这些示例使用Pear邮件包:


http://www.cyberciti.biz/tips/howto-php-send-email-via-smtp-authentication.html

看看Zend_Mail它拥有处理邮件所需的所有功能

-http://framework.zend.com


-http://framework.zend.com/manual/en/zend.mail.html

我为我个人的
Email()
方法写了这段代码,也许它能有所帮助。我使用的正则表达式能够验证来自SMTP服务器的每个回复

if (isset($smtp) === true)
{
    $result = null;
    $stream = stream_socket_client($smtp);

    if (is_resource($stream) === true)
    {
        $data = array('HELO ' . $_SERVER['HTTP_HOST']);
        $result .= substr(ltrim(fread($stream, 8192)), 0, 3);

        if (preg_match('~^220~', $result) > 0)
        {
            $auth = array_slice(func_get_args(), 8, 2);

            if (count($auth) == 2)
            {
                $data = array_merge($data, array('AUTH LOGIN'), array_map('base64_encode', $auth));
            }

            $data[] = sprintf('MAIL FROM: <%s>', implode('', array_slice($from, 0, 1)));

            foreach (array_merge(array_values($to), array_values($cc), array_values($bcc)) as $value)
            {
                $data[] = sprintf('RCPT TO: <%s>', $value);
            }

            $data[] = 'DATA';
            $data[] = implode("\r\n", array_merge(array_diff_key($header, array('Bcc' => true)), array(''), $content, array('.')));
            $data[] = 'QUIT';

            while (preg_match('~^220(?>250(?>(?>334){1,2}(?>235)?)?(?>(?>250){1,}(?>354(?>250)?)?)?)?$~', $result) > 0)
            {
                if (fwrite($stream, array_shift($data) . "\r\n") !== false)
                {
                    $result .= substr(ltrim(fread($stream, 8192)), 0, 3);
                }
            }

            if (count($data) > 0)
            {
                if (fwrite($stream, array_pop($data) . "\r\n") !== false)
                {
                    $result .= substr(ltrim(fread($stream, 8192)), 0, 3);
                }
            }
        }

        fclose($stream);
    }

    return (preg_match('~221$~', $result) > 0) ? true : false;
}
if(isset($smtp)==true)
{
$result=null;
$stream=stream\u socket\u客户端($smtp);
if(is_资源($stream)==true)
{
$data=array('HELO'.$\u服务器['HTTP\u主机']);
$result.=substr(ltrim(fread($stream,8192)),0,3);
如果(预匹配(“^220~”,$result)>0)
{
$auth=array\u slice(func\u get\u args(),8,2);
如果(计数($auth)==2)
{
$data=array_merge($data,array('AUTH LOGIN'),array_map('base64_encode',$AUTH));
}
$data[]=sprintf('mailfrom:',内爆('',array_slice($FROM,0,1));
foreach(数组\合并(数组\值($to)、数组\值($cc)、数组\值($bcc))作为$value)
{
$data[]=sprintf('RCPT TO:',$value);
}
$data[]=“数据”;
$data[]=内爆(“\r\n”,数组合并(数组差异键($header,array('Bcc'=>true)),数组(“”),$content,数组(');
$data[]=“退出”;
而(preg_匹配(“^220(?>250(?>(?>334){1,2}(?>235)?)?(?>(?>250){1,}(?>354(?>250)?)?)?$,$result)>0)
{
if(fwrite($stream,array_shift($data)。“\r\n”)!==false)
{
$result.=substr(ltrim(fread($stream,8192)),0,3);
}
}
如果(计数($data)>0)
{
if(fwrite($stream,array_pop($data)。“\r\n”)!==false)
{
$result.=substr(ltrim(fread($stream,8192)),0,3);
}
}
}
fclose($流);
}
返回(preg_match(“~221$~”,$result)>0)?true:false;
}

你不明白我在问什么。@Bronislaw我真的认为他明白,这是另一个资源如果你不喜欢答案,请在你的问题中详细说明。我需要发送例如RCPT到comand并获得回复。。。我不想发邮件。@Bronislaw请在你原来的帖子中添加这一点和更多细节。尽可能把问题弄清楚,这样我们才能给你一个非常清楚的答案。如果你认为人们不明白你的问题,请澄清你的问题……这正是我想要的。注意:使用
fwrite()
与smtp服务器通信时,必须使用换行符
“\r\n”
终止命令字符串,smtp服务器才能开始执行命令。