SMTP mail()函数发送邮件失败

@Ta 11-17 03:12 640点击
各路神仙指点下要怎么配置php.ini
宝塔安装的php7.0
提示Could not instantiate mail function. Could not instantiate mail function.


<?php
include ("class.phpmailer.php");
include ("class.smtp.php");

//你只需填写以下信息即可****************************


$smtp = "smtp.163.com"; //必填,设置SMTP服务器 QQ邮箱是smtp.qq.com ,QQ邮箱默认未开启,请在邮箱里设置开通。网易的是 smtp.163.com 或 smtp.126.com
$youremail = '@163.com'; // 必填,开通SMTP服务的邮箱;也就是发件人Email。(本系统功能也就是自己给自己发邮件)
$password = ""; //必填, 以上邮箱对应的密码
$ymail = "@qq.com"; //收信人的邮箱地址,也就是你自己收邮件的邮箱*/

//填写信息结束 ****************************
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = $smtp;
$mail->Username = $youremail;
$mail->Password = $password; //必填, 以上邮箱对应的密码
$mail->From = $youremail;
$mail->FromName = "" . iconv("UTF-8", "gb2312//IGNORE", $wangzhanbiaoti) . ""; //必填,发信人的名称
$mail->AddAddress($ymail, $yname); //$yname收件人称呼
//发送内容
$mail->Subject = "" . iconv("UTF-8", "gb2312//IGNORE", $mingcheng . "验证码:" . $yanzhengma_1) .
    "";
//$ip = $_SERVER["REMOTE_ADDR"];
date_default_timezone_set('Asia/Shanghai');
$time = date("Y-m-d H:i:s", time());
$mail->MsgHTML(iconv("UTF-8","gb2312//IGNORE",'验证码:' . $yanzhengma_1 . '<br/>时间:' . $time));
//发送内容
$mail->IsHTML(true);
if (!$mail->Send()) {
    //header("Content-Type: text/html; charset=utf-8");
    echo '<script>
alert("验证码已发送失败!");history.go(-1);
</script>';
} else {
        echo '<script>
alert("发送成功!");
window.location.href = "zhongzhimima.php?com=1&mail=' . $_POST["mail"] . '"
</script>';

}
?>

回复列表(21)
  • @Ta / 11-16 22:49
    百度看了一晚无弄好
  • @Ta / 11-17 04:54

    @坏人,必须使用SSL,否则连不上服务器。非SSL的默认发送端口25已经被封了。

    <?php
    error_reporting(E_ALL);
    
    require_once "./PHPMailer-6.1.8/src/PHPMailer.php";
    require_once "./PHPMailer-6.1.8/src/SMTP.php";
    require_once "./PHPMailer-6.1.8/src/Exception.php";
    
    use PHPMailer\PHPMailer\PHPMailer;
    
    //你只需填写以下信息即可****************************
    
    // 注意,必须使用SSL或者TLS,否则连不上服务器。非SSL的默认发送端口25已经被封了。
    $SMTPSecure = "ssl";
    $smtp = "smtp.163.com"; //必填,设置SMTP服务器 QQ邮箱是smtp.qq.com ,QQ邮箱默认未开启,请在邮箱里设置开通。网易的是 smtp.163.com 或 smtp.126.com
    $SMTPPort = "465";
    
    $youremail = 'hu60.cn@163.com'; // 必填,开通SMTP服务的邮箱;也就是发件人Email。(本系统功能也就是自己给自己发邮件)
    $password = "密码"; //必填, 以上邮箱对应的密码
    $ymail = "hu60.cn@qq.com"; //收信人的邮箱地址,也就是你自己收邮件的邮箱*/
    
    //填写信息结束 ****************************
    
    $mail = new PHPMailer();
    
    // 所有现代邮件客户端都可以处理UTF-8编码
    $mail->CharSet = 'UTF-8';
    $mail->Encoding = 'base64';
    
    // 开启SMTP调试
    $mail->SMTPDebug = 2;
    $GLOBALS['debugOutput'] = [];
    $mail->Debugoutput = function($debugOutputLine, $level) {
        $GLOBALS['debugOutput'][] = trim($debugOutputLine);
    };
    
    $mail->IsSMTP();
    
    $mail->SMTPSecure = $SMTPSecure;
    $mail->Port = $SMTPPort;
    
    $mail->SMTPAuth = true;
    $mail->Host = $smtp;
    $mail->Username = $youremail;
    $mail->Password = $password; //必填, 以上邮箱对应的密码
    
    $mail->From = $youremail;
    $mail->FromName = $wangzhanbiaoti; //必填,发信人的名称
    $mail->AddAddress($ymail, $yname); //$yname收件人称呼
    
    // 生成内容
    // 因为邮件已经使用UTF-8编码,所以不再需要编码转换
    $mail->Subject = $mingcheng . "验证码:" . $yanzhengma_1;
    //$ip = $_SERVER["REMOTE_ADDR"];
    date_default_timezone_set('Asia/Shanghai');
    $time = date("Y-m-d H:i:s", time());
    $mail->MsgHTML('验证码:' . $yanzhengma_1 . '<br/>时间:' . $time);
    
    //发送内容
    $mail->IsHTML(true);
    
    header("Content-Type: text/plain; charset=UTF-8");
    
    if (!$mail->Send()) {
        echo "发送失败\n";
    } else {
        echo "发送成功\n";
    }
    
    $debug_output = implode("\n", $GLOBALS['debugOutput']);
    echo "\n\n-----------------------------------\n\n";
    echo $debug_output;
    
    <br />
    <b>Notice</b>:  Undefined variable: wangzhanbiaoti in <b>/www/wwwroot/hu60.cn/src/wap/mail/mail.php</b> on line <b>47</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: yname in <b>/www/wwwroot/hu60.cn/src/wap/mail/mail.php</b> on line <b>48</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: mingcheng in <b>/www/wwwroot/hu60.cn/src/wap/mail/mail.php</b> on line <b>52</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: yanzhengma_1 in <b>/www/wwwroot/hu60.cn/src/wap/mail/mail.php</b> on line <b>52</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: yanzhengma_1 in <b>/www/wwwroot/hu60.cn/src/wap/mail/mail.php</b> on line <b>56</b><br />
    发送成功
    
    
    -----------------------------------
    
    SERVER -> CLIENT: 220 163.com Anti-spam GT for Coremail System (163com[20141201])
    CLIENT -> SERVER: EHLO hu60.cn
    SERVER -> CLIENT: 250-mail
    250-PIPELINING
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFLhq2HUCa0xDrUUUUj
    250-STARTTLS
    250 8BITMIME
    CLIENT -> SERVER: AUTH LOGIN
    SERVER -> CLIENT: 334 dXNlcm5hbWU6
    CLIENT -> SERVER: [credentials hidden]
    SERVER -> CLIENT: 334 UGFzc3dvcmQ6
    CLIENT -> SERVER: [credentials hidden]
    SERVER -> CLIENT: 235 Authentication successful
    CLIENT -> SERVER: MAIL FROM:<hu60.cn@163.com>
    SERVER -> CLIENT: 250 Mail OK
    CLIENT -> SERVER: RCPT TO:<hu60.cn@qq.com>
    SERVER -> CLIENT: 250 Mail OK
    CLIENT -> SERVER: DATA
    SERVER -> CLIENT: 354 End data with <CR><LF>.<CR><LF>
    CLIENT -> SERVER: Date: Tue, 17 Nov 2020 04:53:55 +0800
    CLIENT -> SERVER: To: hu60.cn@qq.com
    CLIENT -> SERVER: From: hu60.cn@163.com
    CLIENT -> SERVER: Subject: =?UTF-8?B?6aqM6K+B56CBOg==?=
    CLIENT -> SERVER: Message-ID: <124J9rQYqA8653NGeRCeTO6wSyLm2kZP3rtEOao@hu60.cn>
    CLIENT -> SERVER: X-Mailer: PHPMailer 6.1.8 (https://github.com/PHPMailer/PHPMailer)
    CLIENT -> SERVER: MIME-Version: 1.0
    CLIENT -> SERVER: Content-Type: multipart/alternative;
    CLIENT -> SERVER:  boundary="b1_124J9rQYqA8653NGeRCeTO6wSyLm2kZP3rtEOao"
    CLIENT -> SERVER:
    CLIENT -> SERVER: This is a multi-part message in MIME format.
    CLIENT -> SERVER:
    CLIENT -> SERVER: --b1_124J9rQYqA8653NGeRCeTO6wSyLm2kZP3rtEOao
    CLIENT -> SERVER: Content-Type: text/plain; charset=UTF-8
    CLIENT -> SERVER: Content-Transfer-Encoding: base64
    CLIENT -> SERVER:
    CLIENT -> SERVER: 6aqM6K+B56CBOuaXtumXtDoyMDIwLTExLTE3IDA0OjUzOjU1
    CLIENT -> SERVER:
    CLIENT -> SERVER: --b1_124J9rQYqA8653NGeRCeTO6wSyLm2kZP3rtEOao
    CLIENT -> SERVER: Content-Type: text/html; charset=UTF-8
    CLIENT -> SERVER: Content-Transfer-Encoding: base64
    CLIENT -> SERVER:
    CLIENT -> SERVER: 6aqM6K+B56CBOjxici8+5pe26Ze0OjIwMjAtMTEtMTcgMDQ6NTM6NTU=
    CLIENT -> SERVER:
    CLIENT -> SERVER:
    CLIENT -> SERVER: --b1_124J9rQYqA8653NGeRCeTO6wSyLm2kZP3rtEOao--
    CLIENT -> SERVER:
    CLIENT -> SERVER: .
    SERVER -> CLIENT: 250 Mail OK queued as smtp9,DcCowAB3eobj5rJfwPs6RA--.45941S2 1605560036
    CLIENT -> SERVER: QUIT
    SERVER -> CLIENT: 221 Bye
    
  • @Ta / 11-17 09:36
    服务器发邮箱你就不怕ip泄露么
  • @Ta / 11-17 09:54

    @wuyiyi,泄露什么,邮件是由网易的smtp服务器转交的,你的ip又不会出现。

  • @Ta / 11-17 13:01

    自己弄个邮件服务器,mail()一键解决,163qq啥的都有频率和总量限制。
    你好!ICAC,请配合我们调查。

  • @Ta / 11-17 14:33

    @无期徒刑,25端口被云服务商屏蔽了,连不上MX服务器,也就无法向不支持SSL/TLS的邮件服务器发件(这样的邮件服务器目前还有一些)。申请解封要找人工客服。

    这也是楼主的默认设置发信失败的原因。封禁25不只影响了垃圾邮件发送者,也影响了使用非加密协议连接自家邮箱SMTP服务器的普通用户。

    25端口被封是双向的:你连不上别人的25,别人也连不上你的25。

    此外,即使克服了25端口被封的困难,使用非知名邮件服务器IP发信,邮件很可能会被接收方系统直接扔到垃圾箱,甚至直接抛弃或者拒收。

  • @Ta / 11-17 15:44
    用587端口

    或者使用ssl://smtp.163.com
    端口465
  • @Ta / 11-17 23:15
    @老虎会游泳,php调用
    mail($to,$subject,$message,$headers);
    的话会不会泄露ip?
    直接用126邮箱的SMTP服务器不会泄露IP吗?
  • @Ta / 11-18 00:28

    @wuyiyi,如果mail()可以成功,则会泄露ip。smtp转交则不会,因为你只是向126的smtp服务器暴露了ip,126的smtp服务器不会把你的ip告诉其他人。但是如果你直接用mail()发给用户的MX服务器,则用户的MX服务器可能会记录你的ip并且告诉用户。

  • @Ta / 11-18 06:12
    @老虎会游泳,原来,明白
  • @Ta / 11-18 21:21
    @老虎会游泳,试了下好像还是不行
  • @Ta / 11-18 21:25

    @坏人,你得到什么结果,把用我的代码得到的输出粘贴过来。
    输出会显示为什么不行。

  • @Ta / 11-20 07:30
    @老虎会游泳,<br />
    <b>Notice</b>:  Undefined variable: wangzhanbiaoti in <b>C:\2\a.php</b> on line <b>34</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: yname in <b>C:\2\a.php</b> on line <b>35</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: mingcheng in <b>C:\2\a.php</b> on line <b>38</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: yanzhengma_1 in <b>C:\2\a.php</b> on line <b>38</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: yanzhengma_1 in <b>C:\2\a.php</b> on line <b>42</b><br />
    发送失败


    -----------------------------------

    SERVER -> CLIENT: 220 163.com Anti-spam GT for Coremail System (163com[20141201])
    CLIENT -> SERVER: EHLO 162118.cn
    SERVER -> CLIENT: 250-mail
    250-PIPELINING
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFvXHMJUCa0xDrUUUUj
    250-STARTTLS
    250 8BITMIME
    CLIENT -> SERVER: AUTH LOGIN
    SERVER -> CLIENT: 334 dXNlcm5hbWU6
    CLIENT -> SERVER: [credentials hidden]
    SERVER -> CLIENT: 334 UGFzc3dvcmQ6
    CLIENT -> SERVER: [credentials hidden]
    SERVER -> CLIENT: 550 User has no permission
    SMTP ERROR: Password command failed: 550 User has no permission
    SMTP Error: Could not authenticate.
    CLIENT -> SERVER: QUIT
    SERVER -> CLIENT: 221 Bye
    SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
  • @Ta / 11-20 07:35
    @老虎会游泳,会不会是require_once "./PHPMailer-6.1.8/src/PHPMailer.php";
    require_once "./PHPMailer-6.1.8/src/SMTP.php";
    require_once "./PHPMailer-6.1.8/src/Exception.php";
    这几个文件不同,我的是在网上那下的,只提了这三个文件其它都没拿
  • @Ta / 11-20 07:58

    @坏人,你要在邮箱设置里开启SMTP功能,如果没有开启,是用不了的。

    SMTP ERROR: Password command failed: 550 User has no permission
    SMTP错误:密码命令失败:550 用户无权限

    SMTP Error: Could not authenticate.
    SMTP错误:认证失败

  • @Ta / 11-20 08:02

    @坏人,需要在这里开启。此外要注意有可能需要使用“系统随机生成的授权密码”,而不是邮箱密码。

    image.png

    image.png

  • @Ta / 11-20 20:45
    @老虎会游泳,好.迟点试试.我真是用了密码
  • @Ta / 11-20 22:56
    @老虎会游泳,可以了!谢谢了.我把error_reporting(E_ALL);改不显示了但还是把我整个页面都打印出了
添加新回复
回复需要登录

[聊天-此处没有老虎] 暗:@方爷,想尿尿就说,给你拿壶过来 Dark's blog---精品域名出售---…