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

发布于 2024-10-12 05:07:47 字数 33 浏览 4 评论 0原文

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

How to communicate with mail server thru SMTP using PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

森罗 2024-10-19 05:07:47

使用 fsockopen 打开套接字。使用 fwrite 写入套接字。使用 fgets 从套接字逐行读取或使用逐字节读取fread

Open a socket using fsockopen. Write to the socket using fwrite. Read from the socket line by line using fgets or byte by byte using fread.

心奴独伤 2024-10-19 05:07:47

我为我个人的 PHP 框架 phunctionEmail() 方法编写了这段代码a>,也许它可以有一些帮助。我使用的正则表达式能够验证来自 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;
}

I wrote this snippet for the Email() method of my personal PHP framework, phunction, maybe it can be of some help. The regex I used is able to validate each individual reply from the SMTP server.

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;
}
愛上了 2024-10-19 05:07:47

查找 mail() 的文档。

Look up the documentation for mail().

你另情深 2024-10-19 05:07:47

看一下 PHPMailer

Take a look at PHPMailer.

尘曦 2024-10-19 05:07:47

也许您正在寻找这个:

这些示例使用 Pear Mail 包: http://pear.php.net/包/邮件

http://email.about.com/od/ emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm
http://www.cyberciti.biz/tips/howto-php-send-email-via-smtp-authentication.html

Maybe you are looking for this:

These examples use the Pear Mail Package: http://pear.php.net/package/Mail

http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm
http://www.cyberciti.biz/tips/howto-php-send-email-via-smtp-authentication.html

他是夢罘是命 2024-10-19 05:07:47

看一下 Zend_Mail 它具有处理邮件所需的所有功能

-http://framework.zend.com

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

take a look at Zend_Mail it had every function needed to do with mail

-http://framework.zend.com

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文