A-AA+then

ภาษากับการส่งอีเมลแบบ SMTP Authentication ...

2,397
   สวัสดีครับ คืออยากถามผู้รู้หน่อยครับ คือผมทำการส่งเมลแบบ 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";
      }

12 ความคิดเห็น

ลองใช้ phpmailer สิครับ มันสามารถส่งได้สมบูรณ์กว่าครับ และยังสามารถส่งแบบ ssl ได้ ครับ
1

ขอบคุณครับ ที่ตอบ ตอนนี้ก็ยังติดอยู่ครับ ลองเอาโค้ดอาจารย์ไปทดสอบแล้ว แต่หา $mailto ไม่เจอครับ ก็เลยทดสอบไม่ได้ ไม่รู้จะกำหนดให้ส่งไปที่ปลายทางอย่างไรครับ และ Host นี่ $host = "ssl://server11.namecheaphosting.com"; อย่างนี้ถูกต้องไหมครับ ส่วนใหญ่คือต้องไปคอนฟิกที่ไฟล์ class.phpmailer.php ด้วยใช่ไหมครับ ขอบคุณครับ
2

ปัญหาตอนนี้คือลอง phpmailer แล้ว ไม่ได้รับอีเมลอะไรเลยครับ รบกวนช่วยตอบด้วยนะครับ งมมาสามสี่วันแล้ว ขอบคุณครับ
3

โค้ดของผมหลังจากลอง phpMailer ครับ และได้ดาว์โหลดไฟล์ class.phpmailer.php เรียบร้อยแล้ว /ม่ทราบว่าถูกต้องหรือไม่ครับ รบกวนช่วยตอบด้วยนะครับ

<?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!
        }
?>
4

Host กับ Port น่าจะผิดนะครับ ลองตiวจสอบ address ที่ถูกต้องดู

ในเบื้องต้น ที่ phpmailer ผมได้ config ไว้แล้วครับ ไม่จำเป็นต้องทำอะไรเพิ่มเติม

$mail->Host = "server11.namecheaphosting.com";

host น่าจะเป็นแบบนี้มากกว่านะครับ ssl โปรแกรมจะเติมให้เอง
5

ขอบคุณครับ ตอนนี้ใช้ัการได้แล้วครับ แต่ติดตรงภาษาอีกเหมือนกันครับ หากเราพิมพ์ ( ',") เมลที่ได้รับจะกลายเป็น \',\" น่ะครับ ไม่ีทราบว่าโค้ดจำเป็นต้องเพิ่ม \ เข้าไปรึป่าวครับ ตอนนี้ยังหาจุดแก้ไม่เจอครับ รบกวนตอบด้วยนะครับ ขอบคุณมากครับ
6

อา...ก็ remove ออกสิครับ

ทำการตรวจสอบข้อความก่อนส่ง ถ้ามีอะไรเกินมาก็เอาออกซะก่อนส่ง
7

คือว่าไม่ได้เป็นที่ข้อความครับผม เช่น เราพิมพ์จากหน้า ติดต่อเราว่า" I'm web programmer" และส่งไปให้ Admin และ Admin ก็จะได้รับอีเมลนะครับ แต่จะได้รับอีเมลเป็นคำว่า " I\'m web programmer" น่ะครับ คืออันนี้โค้ดของ class.phpmailer.php ที่อาจารย์ให้ดาว์นโหลดน่ะครับ และที่ผิดพลาดนี่อยู่ในส่วนของ $message(ข้อความที่ส่ง) น่ะครับ ไม่รู้ว่าจะเอา "\" ออกได้อย่างไรน่ะครับ ดูโค้ดแล้วก็งงมาก รบกวนด้วยครับ
ผมดัดแปลงจากโค้ด 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";
    }
  }
8

555+++

เวลาส่งผ่านฟอร์ม ' จะถูกแปลงไปเป็น \' และ " จะถูกแปลงเป็น \" เป็นเรื่องปกติของ Server

คิดง่ายๆ มันถูกแปลงมา ก็แปลงกลับ ด้วยวิธีไหนก็ได้ ที่รู้จัก เลือกมาสักวิธี

ถ้ายังคิดไม่ออก ลองใช้ stripslashes()
9

ขอบคุณมากครับ
10

    ส่งแบบมี CC กับ bcc อย่างไรครับ

11

$mail->AddCC('aaa@domain.com', 'aaa');
$mail->AddBCC('aaa@domain.com', 'aaa');
12
^