GORAGOD.com

GORAGOD.com

freelance, web developer, web designer, hosting, domain name

ภาษากับการส่งอีเมลแบบ 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";
      }
06 ก.ค. 2552 12 4,975

ลองใช้ 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
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 64M
^