2011-03-16 60 views
3

在发送电子邮件的PHP脚本中存在一些问题(代码如下)。基本上,它将存储在sql数据库中的联系人信息填充到vCard文件中,并使用php mail()函数将其附加到电子邮件中。未在新服务器上发送PHP邮件()函数

前几天我曾在共享主机服务器上完美工作......但我最近将所有内容都迁移到了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: [email protected]"; 
    $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

新服务器是否有正确配置的SMTP服务器(sendmail,postfix,qmail等)?如果是这样,请检查/ var/log/mail *中的maillog ...此外,如果您在电子邮件之前丢失了@,您可能会收到一条有用的错误消息,以便与... – Carpetsmoker 2011-03-16 19:49:56

+0

您安装了哪个邮件服务器VPS? – mario 2011-03-16 19:51:12

回答

1

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

只是将它缩小一点,尝试一个非常简单的邮件命令

mail("[email protected]", "Subject", "Testing 3, 2, 1...");

在脚本

另外,如果有一个问题,你不会看到它。前面的@禁用显示错误。既然它回归真实,我敢打赌它工作得很好。 mail()函数不验证电子邮件是否被成功发送......只是它被交给别的东西。您的邮箱可能无法正常工作。或者对于Windows,您的SMTP服务器可能设置不正确。

垃圾邮件过滤器中总是存在电子邮件。

+0

好的,所以我试着执行那个简单的邮件脚本,它仍然没有发送任何东西......任何想法我应该在我的php.ini文件中寻找......我有点生疏。对不起,我想这是更多的服务器问题比代码... – Robert 2011-03-16 19:57:24

+0

看看'sendmail_path'和'sendmail_from'。如果在Windows上,请检查STMP区域。 – Brad 2011-03-16 20:21:07

0

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

+0

哦,对不起'回合...... usernum是实际设置的,当我将代码复制到剪贴板并忘记更改它时,我正在摆弄 – Robert 2011-03-16 19:56:17

0

很好的选择是使用的PHPMailer类(HTTP://phpmailer.worxware的.com /)。我使用这个类,它完美的工作。

相关问题