PHP Mailer:从 gmail 向 yahoo 发送邮件,无法识别代码

Posted

技术标签:

【中文标题】PHP Mailer:从 gmail 向 yahoo 发送邮件,无法识别代码【英文标题】:PHP Mailer: sending mails from gmail to yahoo, not recognized code 【发布时间】:2022-01-05 14:30:19 【问题描述】:

所以我想从 gmail 地址向 yahoo 地址发送电子邮件。它工作正常,但是当我打开 yahoo 邮件时,它无法识别我从 gmail 地址发送的邮件。例如,我有一个登录确认按钮,当您收到邮件时必须按下该按钮。当我发送到 gmail 地址时,您可以按下按钮,但是当涉及到 yahoo 地址时.. 不 :(。任何想法为什么?以及如何解决这个问题?

$sentTo = $email;
            $message = "Confirm registration";
            $mail = new phpMailer;

            //$mail->SMTPDebug = 2;

            $mail->isSMTP();                                      // Set mailer to use SMTP
            $mail->Host = 'smtp.gmail.com';                       // Specify main and backup server
            $mail->SMTPAuth = true;                               // Enable SMTP authentication
            $mail->Username = 'myusername';                      // SMTP username
            $mail->Password = 'password';                       // SMTP password
            $mail->SMTPSecure = 'tls';                            // Enable encryption, 'ssl' also accepted
            $mail->Port = 587;                                    //Set the SMTP port number - 587 for authenticated TLS
            $mail->setFrom('myusername@gmail.com', 'WEBSITE');     //Set who the message is to be sent from
            $mail->addAddress($sentTo);                           // Add a recipient
            $mail->WordWrap = 50;                                 // Set word wrap to 50 characters
            $mail->ishtml(true);                                  // Set email format to HTML

            $mail->Subject = "Travel Smart - Confirm Registration - ";
            $mail->Body    = "<div style='padding: 10px; border-radius: 10px; height: auto; background-image:linear-gradient(to right, rgba(287, 202, 192), rgba(142, 65, 98));opacity:0.8;'><h2 style='font-family:cursive'> WELCOME! </h2> <br> <a href='localhost/log.php?unique_id=$ran_id'><button style='color:white; background:black; pointer: cursor; padding: 10px; border-radius: 20px;'>". $message."</button></a><br></div>";
            $mail->AltBody = $message;

            if(!$mail->send()) 
                echo 'Message could not be sent.';
                echo 'Mailer Error: ' . $mail->ErrorInfo;
                exit;
            

【问题讨论】:

您是否尝试过移除 a-tag 内的按钮并改为设置 a-tag 的样式?不同的电子邮件客户端可以以不同的方式解析 HTML 电子邮件,因此最好尽可能降低复杂性。您还应该在链接中的主机名(如http://localhost)之前包含架构(http://https://)。如果没有架构,浏览器将假定您正在尝试从您所在的页面访问相对 URL(某些网络邮件客户端可能会阻止) 另外,本地主机的链接只对你有用,对其他人无效。 你不应该用&lt;a&gt; 包裹&lt;button&gt;。使用w3.org 验证结果:元素button 不得作为a 元素的后代出现。 仍然无法正常工作... 雅虎根本无法识别 html @deniz_info 如果您确实删除了位于a 中的button,它会起作用。刚刚测试过。 【参考方案1】:

您的元素不正确。使用w3.org 结果验证您的 HTML:

元素button 不得作为a 元素的后代出现。

您的链接不正确。它是href="localhost/login.php?..."。您应该将架构(http://https://)包含为@M。上面评论了埃里克森。

这是对正文消息的修复。

$mail->Body    = "<div style='padding: 10px; border-radius: 10px; height: auto; background-image:linear-gradient(to right, rgba(287, 202, 192), rgba(142, 65, 98));opacity:0.8;'><h2 style='font-family:cursive'> WELCOME! </h2> <br> <a href='https://localhost/log.php?unique_id=$ran_id' style='color:white; background:black; pointer: cursor; padding: 10px; border-radius: 20px;'>Hello world</a><br></div>";

不要忘记将 Hello world 替换为您的 $message。以上代码用于测试。

截图:

黑色按钮的链接可以点击到https://localhost/...

【讨论】:

为什么背景不可见? 你第一次没有提到背景。我几乎使用了你所有的 HTML,除了重新格式化 a 以通过删除其中的 button 使其有效。我没有修改你的css背景。如果这不起作用,则意味着它也不应该在您的代码中起作用。正如 M. Eriksson 对您的问题所评论的那样,不同的电子邮件客户端可以以不同的方式解析 HTML 电子邮件。这包含在 CSS 中。 检查限制here结果:15个已知邮件客户端不支持background-image样式,应避免实现。关于background linear-gradient on Yahoo的答案。

以上是关于PHP Mailer:从 gmail 向 yahoo 发送邮件,无法识别代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift Mailer、GMail 和 PHP 发送电子邮件,权限被拒绝错误

我向其发送邮件的每个用户都会重复 PHP Mailer 邮件

使用 php、gmail 和 swiftmailer 发送电子邮件会导致与 SSL 相关的错误

Django - 使用 django-mailer 发送批量邮件

如果我需要从gmail回复到我的php网站该怎么办?

使用 PHP Mailer 从本地服务器外部的电子邮件地址发送 smtp 电子邮件