发送电子邮件的PHP脚本存在一些问题(下面的代码)。基本上,它使用存储在sql db中的联系信息填充vCard文件,并使用php mail()函数将其附加到电子邮件中。
我几天前在共享托管服务器上完美地工作了......但我最近将所有内容迁移到了VPS,它神奇地停止了工作。 Mail()在发送时继续返回true,但实际的电子邮件永远不会到达我的收件箱。
//sendemail: emails a vCard when passed an email address and name
function sendemail($address, $scanreduser)
{
include('../dbconnect.php');
$info = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE usernum='". $usernum ."' LIMIT 1 "));
$vcard_content = "BEGIN:VCARD\r";
$vcard_content .= "VERSION:3.0\r";
$vcard_content .= "N:".$info[lname].";". $info[fname] .";;;\r";
$vcard_content .= "FN:".$info[fname]." ". $info[lname] ."\r";
$vcard_content .= "ORG:".$info[company].";\r";
$vcard_content .= "TITLE:".$info[title]."\r";
$vcard_content .= "EMAIL;type=INTERNET;type=WORK;type=pref:".$info[email]."\r";
$vcard_content .= "TEL;type=WORK;type=pref:".$info[phone]."\r";
$vcard_content .= "item2.URL;type=pref:".$info[website]."\r";
$vcard_content .= "item2.X-ABLabel:_$!<HomePage>!\$\_\r";
$vcard_content .= "X-ABShowAs:COMPANY\r";
$vcard_content .= "END:VCARD";
$email_subject = "Your vCard from " . $info[fname] . " " . $info[lname];
$fileatt_type = "application/octet-stream"; // File Type
$fileatt_name = $info[fname] ."_". $info[lname] .".vcf";
$headers = "From: Ben@scanred.com";
$today = date("l, F j, Y, g:i a");
$message = "<br />Simply open the attached vCard file to view/download the information<br />";
$message .= $today." PST<br /><br />";
$message .= $info[name]."<br />";
$data = $vcard_content;
$data = chunk_split(base64_encode($data));
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
echo @mail($address, $email_subject, $message, $headers);
echo $address;
}
答案 0 :(得分:1)
它可能位于服务器上的某个队列中。检查你的php.ini。
只是为了缩小它,尝试一个非常简单的邮件命令...
mail("youraddress@whatever.com", "Subject", "Testing 3, 2, 1...");
同样在您的脚本中,如果出现问题,您将看不到它。前面的@
禁用显示错误。既然它回归真实,我敢打赌它的工作正常。 mail()
函数不会验证电子邮件是否已成功发送...只是它已被传递给其他人。您的邮箱上的sendmail可能无法正常运行。或者对于Windows,可能未正确设置SMTP服务器。
电子邮件总是存在于某处的垃圾邮件过滤器中。
答案 1 :(得分:0)
问题可能是$ usernum未设置,使用global $ usernum或将其传递给函数也是$ scanreduser从未使用过
答案 2 :(得分:0)
好的选择是使用PHPMailer类(http://phpmailer.worxware.com/)。我正在使用这个类,它完美无缺。