0

我正在使用 PHPmailer 向客户发送电子凭证。我想将动态 html 文档作为正文发送给用户,但是当我引用此文件时,出现错误。

我的代码如下:

$sessionid = '12345';
$cid = '98765';
require('class.phpmailer.php');
$bodytext1 = "Your Evoucher is attached for ".$row_checkout['name'];
$email = new PHPMailer();
$email->From      = 'noreply@xxx.com';
$email->FromName  = 'xxx.com';
$email->Subject   = 'Your e-voucher for '.$row_checkout['name'];
$email->AddAddress( $row_user['email'] );
$email->MsgHTML(file_get_contents('mail.php?sid='.$sessionid.'&cid='.$cartid));

$file_to_attach = $sessionid.'/'.$bookingid.'.pdf';

$email->AddAttachment( $file_to_attach , $bookingid.'.pdf' );
return $email->Send();

当我运行它时,我收到以下错误:

Warning: file_get_contents(mail.php?sid=12345&cid=98765) [function.file-get-contents]: failed to open stream: No such file or directory in /home4/mission/public_html/xxx.com/evoucher/new/createandmail.php on line 93

但是,如果我不将变量放在 url 中,即

$email->MsgHTML(file_get_contents('mail.php')

它发送得很好,但是带有一个没有正确字段的正文。

有什么建议么?

4

4 回答 4

0

您不能将 GET 参数添加到要加载的文件中。 file_get_contents将加载您的 php 文件内容 - 而不是将生成什么脚本。

如果您启用了 url fopen,您可以将完整的 url 地址添加到 mail.php 但这并不总是最好的主意,或者您可以将此 mail.php 包含到您的代码中(但首先将 _GET 更改为您的内部变量)

于 2013-07-16T21:31:42.533 回答
0

您必须使用完整的 URL(包含协议:)http://..或使用文件名。mail.php?sid...不是文件名 - 这是由 apache 处理的相对 uri。如果您使用 file_get_contents('mail.php'),则发送原始 php 文件,这可能不是您想要的。

您也可以尝试该virtual功能而不是使用file_get_contents('http://server.com/mail.php?...'

于 2013-07-16T21:31:57.013 回答
0

您可以包含一个文件并使用当前脚本中的变量(会话和购物车 ID)。如果在包含的 PHP 脚本中设置 HTML 正文,就没有问题。

于 2013-07-16T21:36:49.487 回答
0

我建议使用cURL获取 mail.php的内容,然后应该正确获取内容。(或在 file_get_contents 中使用完整的 url)

于 2013-07-16T21:33:54.813 回答