PHP mail() function not sending on new server
Having some issues with a PHP script that sends emails (code below). Basically, it populates a vCard file with contact information stored in an sql db and attaches it to an email using the php mail() function.
I had this working perfectly on a shared hosting server a few days ago... but I recently migrated everything over to a VPS and it magically stopped working. Mail() continues to return true on send, but the actual email never arrives in my inbox.
//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]."\开发者_JAVA百科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;
}
It is probably sitting in a queue somewhere on your server. Check your php.ini.
Just to narrow it down a bit, try a really simple mail command...
mail("youraddress@whatever.com", "Subject", "Testing 3, 2, 1...");
Also in your script, if there were a problem, you wouldn't see it. The @
in front disables displaying of errors. Since it is returning true though, I bet it's working just fine. The mail()
function doesn't verify that the e-mail was successfully sent... only that it was handed off to something else. Your sendmail on the box may not be functioning. Or for Windows, your SMTP server may not be set correctly.
There is also always the case of the e-mail sitting in a spam filter somewhere.
the problem could be that $usernum is not set, use global $usernum or pass it to the function also $scanreduser is never used
Good option is to use PHPMailer class (http://phpmailer.worxware.com/). I'm using this class and it works perfectly.
精彩评论