我正在使用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')
它发送正常,但是一个没有正确字段的正文。
有什么建议吗?
答案 0 :(得分:0)
您无法将GET参数添加到要加载的文件中。
file_get_contents
将加载您的php文件内容 - 而不是将生成的脚本。
如果您启用了url fopen,则可以将完整的URL地址添加到mail.php,但这并不总是最好的想法,或者您可以将mail.php包含在您的代码中(但首先将_GET更改为您的内部变量)
答案 1 :(得分:0)
您必须使用完整的URL(包含协议:http://..
)或使用文件名。 mail.php?sid...
不是文件名 - 这是一个相对的uri,它是由apache handeld。如果你使用file_get_contents('mail.php'),你发送原始的php文件,这可能不是你想要的。
您也可以尝试使用virtual
功能,而不是使用file_get_contents('http://server.com/mail.php?...'
答案 2 :(得分:0)
我建议使用cURL获取mail.php的内容,然后应正确获取内容。 (或者在file_get_contents中使用完整的URL)
答案 3 :(得分:0)
您可以包含文件并使用当前脚本中的变量(会话和购物车ID)。如果在包含的PHP脚本中设置HTML主体,则没有问题。