ภาษากับการส่งอีเมลแบบ SMTP Authentication ...
สวัสดีครับ คืออยากถามผู้รู้หน่อยครับ คือผมทำการส่งเมลแบบ SMTP Authentication น่ะครับ(สาเหตุเพราะทำเว็บ SSL เลยใช้โค้ดปกติไม่ได้ และเป็นโฮสนอกด้วยครับ)
ที่อยากจะถามคือ พอดีเว็บนี้จะใช้ภาษาฝรั่งเศสด้วยน่ะครับ ดังโค้ด แต่ผมลองส่งไปที่ Gmail ก็ใช้งานได้ปกติครับ แต่ใช้งานกับ Outlook & Yahoo ไม่ได้ครับ จะเป็นภาษา "Elรฉgant" อยากให้ Support ได้ทั้งหมด ขอคำแนะนำจากผู้รู้ด้วยนะครับ ขอขอบพระคุณครับ
require_once "Mail.php";
$from = "Test<info@Test.com>";
$to = "$emailto";
$subject = "Test";
$strHeader ="Content-Type: text/plain; charset=utf-8\r\n";
$strHeader .="X-Mailer: PHP mailer\r\n";
$strHeader .= "From: $from\r\n";
$strHeader .= "Reply-to: $from\r\n";
$strHeader .= "X-Priority: 3\r\n";
$strHeader .= "X-Mailer: PHP mailer\r\n";
$body = "Dear Elégant \n\n\n";
$host = "ssl://server11.xxxxxxxxxxx.com";
$port = "465";
$username = "info@Test.com";
$password = "xxxxxxx";
$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject,'strHeader'=>$strHeader);
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo $mail->getMessage();
}
else {
echo "sucessful";
}
ที่อยากจะถามคือ พอดีเว็บนี้จะใช้ภาษาฝรั่งเศสด้วยน่ะครับ ดังโค้ด แต่ผมลองส่งไปที่ Gmail ก็ใช้งานได้ปกติครับ แต่ใช้งานกับ Outlook & Yahoo ไม่ได้ครับ จะเป็นภาษา "Elรฉgant" อยากให้ Support ได้ทั้งหมด ขอคำแนะนำจากผู้รู้ด้วยนะครับ ขอขอบพระคุณครับ
require_once "Mail.php";
$from = "Test<info@Test.com>";
$to = "$emailto";
$subject = "Test";
$strHeader ="Content-Type: text/plain; charset=utf-8\r\n";
$strHeader .="X-Mailer: PHP mailer\r\n";
$strHeader .= "From: $from\r\n";
$strHeader .= "Reply-to: $from\r\n";
$strHeader .= "X-Priority: 3\r\n";
$strHeader .= "X-Mailer: PHP mailer\r\n";
$body = "Dear Elégant \n\n\n";
$host = "ssl://server11.xxxxxxxxxxx.com";
$port = "465";
$username = "info@Test.com";
$password = "xxxxxxx";
$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject,'strHeader'=>$strHeader);
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo $mail->getMessage();
}
else {
echo "sucessful";
}
<?php
require_once ('class.phpmailer.php');
$mail = new PHPMailer(true);
$mail->IsSMTP(); // telling the class to use SMTP
try {
$mail->Encoding = "quoted-printable";
$mail->CharSet = "utf-8";
// send mail by gmail
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPSecure = "ssl"; // sets the prefix to the servier
$mail->Host = "ssl://server11.namecheaphosting.com"; // sets GMAIL as the SMTP server
$mail->Port = 465; // set the SMTP port for the GMAIL server
$mail->Username = "info@xxxxxxxxx.com"; // GMAIL username
$mail->Password = "xxxxxxxxxx"; // GMAIL password
$mail->AddReplyTo($From, $From);
$mail->AddAddress($ConfirmReadingTo,$ConfirmReadingTo);
$mail->SetFrom($From, $From);
$mail->Subject = $Subject;
$mail->MsgHTML($Body);
$mail->Send();
return true;
}
catch (phpmailerException$e) {
return false; //Pretty error messages from PHPMailer
}
catch (Exception $e) {
return false; //Boring error messages from anything else!
}
?>
ในเบื้องต้น ที่ phpmailer ผมได้ config ไว้แล้วครับ ไม่จำเป็นต้องทำอะไรเพิ่มเติม
$mail->Host = "server11.namecheaphosting.com";
host น่าจะเป็นแบบนี้มากกว่านะครับ ssl โปรแกรมจะเติมให้เอง
ทำการตรวจสอบข้อความก่อนส่ง ถ้ามีอะไรเกินมาก็เอาออกซะก่อนส่ง
ผมดัดแปลงจากโค้ด phpmailer จดหมายเวียนน่ะครับ
public function MsgHTML($message, $basedir = '') {
preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images);
if(isset($images[2])) {
foreach($images[2] as $i => $url) {
// do not change urls for absolute images (thanks to corvuscorax)
if (!preg_match('#^[A-z]+://#',$url)) {
$filename = basename($url);
$directory = dirname($url);
($directory == '.')?$directory='':'';
$cid = 'cid:' . md5($filename);
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$mimeType = self::_mime_types($ext);
if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; }
if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; }
if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) {
$message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message);
}
}
}
}
$this->IsHTML(true);
$this->Body = $message;
$textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));
if (!empty($textMsg) && empty($this->AltBody)) {
$this->AltBody = html_entity_decode($textMsg);
}
if (empty($this->AltBody)) {
$this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n";
}
}
เวลาส่งผ่านฟอร์ม ' จะถูกแปลงไปเป็น \' และ " จะถูกแปลงเป็น \" เป็นเรื่องปกติของ Server
คิดง่ายๆ มันถูกแปลงมา ก็แปลงกลับ ด้วยวิธีไหนก็ได้ ที่รู้จัก เลือกมาสักวิธี
ถ้ายังคิดไม่ออก ลองใช้ stripslashes()
ส่งแบบมี CC กับ bcc อย่างไรครับ
$mail->AddBCC('aaa@domain.com', 'aaa');