HTML 邮件中的 PHPMailer a href link 无法正常工作

PHPMailer a href link in HTML mail isn't working correct

我得到了这个代码:

$userid = 123456;
    $plaintext  = "
    Klicke auf den folgenden Link um deine Anmeldung bei xxx zu bestätigen:
    http://xxx.de/confirm.php?id=" . $userid;

    $html = '
    Klicke auf den folgenden Link um deine Anmeldung bei xxx zu bestätigen:
    <br><br>
    <a href="http://xxx.de/confirm.php?id=' . $userid . '">Anmeldung abschliessen</a>';


    $mail = new PHPMailer;
    $mail->CharSet = 'utf-8';
    $mail->setLanguage('de', 'language/');
    $mail->isSMTP();
    $mail->Host = "xxx";
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'xxx';
    $mail->Password = 'xxx';
    $mail->SMTPSecure = 'tls';
    $mail->From = 'kontakt@xxx.de';
    $mail->FromName = 'xxx';
    $mail->addAddress($email, $email);
    $mail->addReplyTo('kontakt@xxx.de', 'xxx');
    $mail->isHTML(true);
    $mail->Subject = $nickname . ' - Bestätige deine Anmeldung';
    $mail->Body    = $html;
    $mail->AltBody = $plaintext;
    $mail->send();

link 在纯文本邮件中工作正常,但在 HTML 版本中不正确,link 变成类似:xxx.de/?id=fdfafdafadfadfargagga 所以整数变成了无穷无尽的字母, confirm.php 部分消失了。这可能是什么问题?

这确实是您的电子邮件处理器的问题。解决此问题的最简洁方法是在您的 Web 服务器上设置重写。如果您使用的是 apache,则可以在您的 apache 配置文件或 .htacccess 文件中执行此操作:

RewriteRule ^/confirm/([0-9]+) /confirm.php?id= [L]

这会将 http://xxx.de/confirm/1234 之类的 URL(应由电子邮件处理程序单独保留)重写为 http://xxx.de/confirm.php?id=1234,这是您的脚本所期望的。在您的模板中,您将重新排列它以使其看起来像第一种形式:

$html = 'Klicke auf den folgenden Link um deine Anmeldung bei xxx zu bestätigen:<br><br>
<a href="http://xxx.de/confirm/' . $userid . '">Anmeldung abschliessen</a>';

而且您似乎也有一些编码问题需要处理...