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>';
而且您似乎也有一些编码问题需要处理...
我得到了这个代码:
$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>';
而且您似乎也有一些编码问题需要处理...