【问题标题】:URL Link not clickable when a Php variable is passed onto it in phpmailer在 phpmailer 中将 Php 变量传递给 URL 链接时,URL 链接不可点击
【发布时间】:2021-11-20 12:56:50
【问题描述】:

我试图将某些 php 变量作为可点击链接的一部分传递给通过 PhpMailer 发送。为此,我在这里引用了一个解决方案,但仍然无法使其正常工作 source

$site = 'http://example.com';
$user_id = 100;

$msg="Please Click links below.<br> <br>
<a  href='$site/link1.php?id=$user_id'>Link 1</a><br><br>
<a  href='$site/link2.php'>Link 2</a>";         

$msg_body = "Here is your $msg";

这是我的问题:当我运行代码时,电子邮件已成功发送,但 link1 和 link 2 均不可点击。

下面是代码

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;



// Load Composer's autoloader
require 'vendor/autoload.php';

// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

$site = 'http://example.com';
$user_id = 100;


$msg="Please Click links below.<br> <br>
<a  href='$site/link1.php?id=$user_id'>Link 1</a><br><br>
<a  href='$site/link2.php'>Link 2</a>";         

$msg_body = "Here is your $msg";



    //PHP Mailer Server settings goes here



    $mail->setFrom('henry@mysite.com', "Henry Good");
      $mail->addAddress($reciever@gmail.com, 'Ann Ball);     // Add a recipient
    $mail->isHTML(true); // Set email format to HTML
    $mail->Subject = 'My Email Subject';
    $mail->Body = $msg_body;
    $mail->AltBody = $msg_body; // for Plain text for non-HTML mails
   $sent =  $mail->send();
 

【问题讨论】:

  • 您是否检查过电子邮件的最终 HTML 以查看其是否有效 - 特别是链接的 HTML 和 href 属性的内容?您是否也使用多个邮件客户端对此进行了测试?
  • html 是有效的。问题是它不可点击。我认为是变量$site$user_id that 导致了这个问题。如果我删除变量并尝试下面的&lt;a href='http://example.com/link2.php'&gt;This works&lt;/a&gt; 它可以工作。
  • 好吧,你展示的代码会产生完全相同的输出(演示:sandbox.onlinephpfunctions.com/code/…),所以不清楚如何或为什么会阻止它工作......邮件客户端不知道无论您是硬编码链接还是使用 PHP 生成链接,随电子邮件发送的 HTML 在任何一种情况下都应该是相同的。您是否检查过电子邮件的原始源代码(大多数邮件客户端都有执行此操作的工具)以检查它是否确实包含您所期望的内容?
  • addAddress 函数中缺少一些引号
  • ADyson 在上面写了合理的评论。请检查您的html是否有效。 @Nancy Moore,您能否在浏览器中打开您的结果并检查链接是否在那里正常工作?是否可以与我们共享源 html 输出?

标签: php html email


【解决方案1】:

到目前为止我发现的一个问题是您将 $site 和 $user_id 变量连接到 $msg 变量的内容的方式

$site = 'http://example.com';
$user_id = 100;
$msg = "Please Click links below. <br/><br/><a href='" . $site . "/link1.php?id=" . $user_id .
        "'>Link</a><br><br><a href='" . $site . "/link2.php?id=" . $user_id . "'>Link2</a>";

有关字符串操作的更多信息https://www.php.net/manual/en/language.operators.string.php

【讨论】:

  • 目前的处理方式没有问题 - 演示:sandbox.onlinephpfunctions.com/code/…。您的建议没有错,但同样不会产生不同的结果,因此没有理由将其更改为此版本。
  • 你可能是对的。这可能是 phpMailer 尝试将味精作为纯文本发送的问题。将 $msg 内容包含在段落标签中可能会起到“

    请点击下面的链接。

    链接

    Link2

    ";
  • 什么意思?? $mail-&gt;isHTML(true); 控制消息是否以纯文本形式发送。如果消息是纯文本,那么在已经存在的 HTML 中添加额外的 HTML 不会使邮件客户端突然将其解释为 HTML。添加&lt;p&gt; 也不会神奇地使超链接可点击。其他事情正在发生,OP 未能生成 minimal reproducible example 来证明该问题,所以我们应该等待澄清。
【解决方案2】:

尝试做这样的事情:

  1. $mail-&gt;Body = html_entity_decode($msg_body);
  2. $mail-&gt;set('Body', $msg_body);
  3. 以任何方式尝试将您的邮件正文包装在&lt;html&gt;&lt;/html&gt; 中以获取有效代码。类似于下面的示例:

$mail-&gt;Body = sprintf('&lt;html&gt;&lt;body&gt;%s&lt;body&gt;&lt;html&gt;', $msg_body);

我希望其中的一些内容可以帮助您解决问题。

【讨论】:

  • 感谢您回复我。我已经尝试了您上面列出的所有方法,但还没有一个有效。 html 是有效的。问题是它不可点击。我认为是变量$site$user_id that 导致了这个问题。如果我删除变量并尝试下面的&lt;a href='http://example.com/link2.php'&gt;This works&lt;/a&gt; 它可以工作。请问有没有我可以在链接中休息这些变量
猜你喜欢
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2014-04-06
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多