Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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 什么';我的邮件功能出了什么问题?_Php_Email_Smtp_Gmail - Fatal编程技术网

Php 什么';我的邮件功能出了什么问题?

Php 什么';我的邮件功能出了什么问题?,php,email,smtp,gmail,Php,Email,Smtp,Gmail,我从开源的punbb论坛软件中获取了邮件功能 这是: function smtp_mail($to, $subject, $message, $headers, $username, $password, $host, $use_ssl){ global $forum_config; $recipients = explode(',', $to); // Sanitize the message $message = str_replace("\r\n.",

我从开源的punbb论坛软件中获取了邮件功能

这是:

function smtp_mail($to, $subject, $message, $headers, $username, $password, $host, $use_ssl){
    global $forum_config;

    $recipients = explode(',', $to);

    // Sanitize the message
    $message = str_replace("\r\n.", "\r\n..", $message);
    $message = (substr($message, 0, 1) == '.' ? '.'.$message : $message);

    // Are we using port 25 or a custom port?
    if (strpos($host, ':') !== false){
        list($smtp_host, $smtp_port) = explode(':', $host);
    }else{
        $smtp_host = $host;
        $smtp_port = 25;
    }

    if ($use_ssl == '1'){
        $smtp_host = 'ssl://'.$smtp_host;
    }

    if (!($socket = fsockopen($smtp_host, $smtp_port, $errno, $errstr, 15))){
        error('Could not connect to smtp host "'.$host.'" ('.$errno.') ('.$errstr.').', __FILE__, __LINE__);
    }

    server_parse($socket, '220');

    if ($username != '' && $password != ''){
        fwrite($socket, 'EHLO '.$smtp_host."\r\n");
        server_parse($socket, '250');

        fwrite($socket, 'AUTH LOGIN'."\r\n");
        server_parse($socket, '334');

        fwrite($socket, base64_encode($username)."\r\n");
        server_parse($socket, '334');

        fwrite($socket, base64_encode($password)."\r\n");
        server_parse($socket, '235');
    }else{
        fwrite($socket, 'HELO '.$smtp_host."\r\n");
        server_parse($socket, '250');
    }

    fwrite($socket, 'MAIL FROM: <'.$username.'>'."\r\n");
    server_parse($socket, '250');

    foreach ($recipients as $email){
        fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
        server_parse($socket, '250');
    }

    fwrite($socket, 'DATA'."\r\n");
    server_parse($socket, '354');

    fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");

    fwrite($socket, '.'."\r\n");
    server_parse($socket, '250');

    fwrite($socket, 'QUIT'."\r\n");
    fclose($socket);

    return true;
}

function server_parse($socket, $expected_response){
    $server_response = '';

    while (substr($server_response, 3, 1) != ' '){
        if (!($server_response = fgets($socket, 256))){
            error('Couldn\'t get mail server response codes.<br />Please contact the forum administrator.', __FILE__, __LINE__);
        }
    }

    if (!(substr($server_response, 0, 3) == $expected_response)){
        error('Unable to send e-mail.<br />Please contact the forum administrator with the following error message reported by the SMTP server: "'.$server_response.'"', __FILE__, __LINE__);
    }
}

function error($m){
    die($m);
}   
function smtp_-mail($to、$subject、$message、$headers、$username、$password、$host、$use_-ssl){
全球$forum_配置;
$recipients=分解(“,”,$to);
//清理邮件
$message=str_replace(“\r\n.”,“\r\n…”,$message);
$message=(substr($message,0,1)='。$message:$message);
//我们使用的是端口25还是自定义端口?
if(strpos($host,:')!==false){
列表($smtp_主机,$smtp_端口)=分解(“:”,$host);
}否则{
$smtp_host=$host;
$smtp_port=25;
}
如果($use_ssl==“1”){
$smtp_主机='ssl://'。$smtp_主机;
}
如果(!($socket=fsockopen($smtp\u主机,$smtp\u端口,$errno,$errstr,15))){
错误('无法连接到smtp主机'.$host'.''('.$errno'.)('.$errstr'.).,'uuuu文件,'uuuu行');
}
服务器解析($socket,'220');
如果($username!=''&&$password!=''){
fwrite($socket,'EHLO.$smtp\u host.\r\n”);
服务器解析($socket,'250');
fwrite($socket,'AUTH LOGIN'。“\r\n”);
服务器解析($socket,'334');
fwrite($socket,base64_encode($username)。“\r\n”);
服务器解析($socket,'334');
fwrite($socket,base64_encode($password)。“\r\n”);
服务器解析($socket,'235');
}否则{
fwrite($socket,'HELO.$smtp\u host.\r\n”);
服务器解析($socket,'250');
}
fwrite($socket,'MAIL FROM:'。“\r\n”);
服务器解析($socket,'250');
foreach($email形式的收件人){
fwrite($socket,'RCPT TO:'。“\r\n”);
服务器解析($socket,'250');
}
fwrite($socket,'DATA'。“\r\n”);
服务器解析($socket,'354');
fwrite($socket,'Subject:'.$Subject.'\r\n'.'到:,'.'.\r\n'.$headers.\r\n\r\n'.$message.\r\n“);
fwrite($socket,'..“\r\n”);
服务器解析($socket,'250');
fwrite($socket,'QUIT'。“\r\n”);
fclose($socket);
返回true;
}
函数服务器\u解析($socket,$expected\u响应){
$server_response='';
while(substr($server_response,3,1)!=''){
如果(!($server\u response=fgets($socket,256))){
错误('无法获取邮件服务器响应代码。
请与论坛管理员联系。'、\uuuuuu文件、\uuuuu行\uuuuuuuuu); } } if(!(substr($server\u response,0,3)=$expected\u response)){ 错误('无法发送电子邮件。
请使用SMTP服务器报告的以下错误消息与论坛管理员联系:“'.$server\u response.'”、\uuuu FILE\uuuu、\uu LINE\uuuu); } } 函数错误($m){ 死亡(百万美元); }
它在大多数情况下都能工作,但当发送到任何gmail地址时,邮件会弹出以下错误代码(删除ip地址、电子邮件地址等):

此邮件由邮件传递软件自动创建。
您发送的邮件无法传递到其一个或多个联系人
收件人。这是一个永久性的错误。以下地址失败:
someone@gmail.com
数据结束后远程邮件服务器出现SMTP错误:
主机gmail-smtp-in.l.google.com[173.194.64.26]:
550-5.7.1[1.1.1.11]我们的系统检测到此消息是错误的
550-5.7.1不符合RFC 2822。为了减少发送到Gmail的垃圾邮件数量,
550-5.7.1此消息已被阻止。请复习
550 5.7.1 RFC 2822规范了解更多信息。sm4si11387798obb.202-gsmtp
------这是邮件的副本,包括所有的标题------
返回路径:
接收:来自[1.1.1.1](端口=50336直升机)=ssl://mail.example.com)
通过mail.example.com与esmtpsa(未知:DHE-RSA-AES256-GCM-SHA384:256)
(进出口4.80.1)
(信封来自)
id 1WPQMJ-0001mk-Q4
对于someone@gmail.com; 2014年3月17日星期一00:45:11-0500
主题:测试电子邮件
致:
这是一个测试

我不知道错误是什么,我试图查看提到的规范,但它只是一堆无用的文本,对我来说毫无意义:/

尝试使用发送被gmail接受的smtp授权电子邮件。Gmail对于看起来像垃圾邮件的邮件是非常不友好的…

你为什么不尝试将邮件发送到你的备用地址。。它说邮件不能发送到
someone@gmail.com
该功能适用于我托管的任何地址。我还没有测试过其他流行的邮件服务提供商,比如yahoo或bing/msn/microsoft/whatevertherecalleduse,即您的服务器地址。当发件人地址不在我的服务器上时,我从godaddy服务器发送邮件时遇到问题。我已经在使用服务器上的电子邮件。
This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  someone@gmail.com
    SMTP error from remote mail server after end of data:
    host gmail-smtp-in.l.google.com [173.194.64.26]:
    550-5.7.1 [1.1.1.1      11] Our system has detected that this message is
    550-5.7.1 not RFC 2822 compliant. To reduce the amount of spam sent to Gmail,
    550-5.7.1 this message has been blocked. Please review
    550 5.7.1 RFC 2822 specifications for more information. sm4si11387798obb.202 - gsmtp

------ This is a copy of the message, including all the headers. ------

Return-path: <someone@terratekkit.org>
Received: from [1.1.1.1] (port=50336 helo=ssl://mail.example.com)
    by mail.example.com with esmtpsa (UNKNOWN:DHE-RSA-AES256-GCM-SHA384:256)
    (Exim 4.80.1)
    (envelope-from <someone@example.com>)
    id 1WPQMJ-0001mk-Q4
    for someone@gmail.com; Mon, 17 Mar 2014 00:45:11 -0500
Subject: test email
To: <someone@gmail.com>


this is a test