3

发送电子邮件的 PHP 脚本存在一些问题(代码如下)。基本上,它使用存储在 sql 数据库中的联系信息填充 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;


}
4

3 回答 3

1

它可能在您服务器上某处的队列中。检查你的 php.ini。

只是为了缩小范围,尝试一个非常简单的邮件命令......

mail("youraddress@whatever.com", "Subject", "Testing 3, 2, 1...");

同样在您的脚本中,如果有问题,您将看不到它。前面@的禁用显示错误。既然它返回了 true,我敢打赌它工作得很好。该mail()功能不会验证电子邮件是否已成功发送......只是它已被移交给其他人。您在盒子上的 sendmail 可能无法正常工作。或者对于 Windows,您的 SMTP 服务器可能设置不正确。

也总是存在电子邮件位于某个垃圾邮件过滤器中的情况。

于 2011-03-16T19:49:03.393 回答
0

好的选择是使用 PHPMailer 类 (http://phpmailer.worxware.com/)。我正在使用这个类,它工作得很好。

于 2011-03-17T01:18:24.240 回答
0

问题可能是 $usernum 未设置,使用全局 $usernum 或将其传递给函数也从未使用 $scanreduser

于 2011-03-16T19:53:22.407 回答