Rumah php教程 php手册 完整邮件发送类

完整邮件发送类

Jun 13, 2016 am 11:23 AM
class port public smtp t var variables hantar keseluruhan baik hati mel

完整邮件发送类
class smtp
{
/* Public Variables */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;

/* Private Variables */
var $sock;

/* Constractor */
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
{
 $this->debug = FALSE;
 $this->smtp_port = $smtp_port;
 $this->relay_host = $relay_host;
 $this->time_out = 30; //is used in fsockopen()
 $this->auth = $auth;//auth
 $this->user = $user;
 $this->pass = $pass;
 $this->host_name = "localhost"; //is used in HELO command
 $this->log_file = "";
 $this->sock = FALSE;
}

/* Main Function */
function sendmail($to, $from ,$fromname, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = ""){
 $mail_from = $this->get_address($this->strip_comment($from));
 $body = ereg_replace("(^|(rn))(.)", "1.3", $body);
 $header .= "MIME-Version:1.0rn";
 if($mailtype=="HTML"){
  $header .= "Content-Type:text/html;charset=utf-8rn";
 }
 $header .= "To: ".$to."rn";
 if ($cc != ""){
  $header .= "Cc: ".$cc."rn";
 }
 $header .= "From: $fromnamern";
 $header .= "Subject: ".$subject."rn";
 $header .= $additional_headers;
 $header .= "Date: ".date("r")."rn";
 $header .= "X-Mailer:By Redhat (PHP/".php教程version().")rn";
 list($msec, $sec) = explode(" ", microtime());
 $header .= "Message-ID: rn";
 $TO = explode(",", $this->strip_comment($to));

 if ($cc != ""){
  $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
 }
 if ($bcc != ""){
  $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
 }
 $sent = TRUE;
 foreach ($TO as $rcpt_to){
  $rcpt_to = $this->get_address($rcpt_to);
  if (!$this->smtp_sockopen($rcpt_to)){
   $this->log_write("Error: Cannot send email to ".$rcpt_to."n");
   $sent = FALSE;
   continue;
  }
  if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)){
   $this->log_write("E-mail has been sent to n");
  }else{
   $this->log_write("Error: Cannot send email to n");
   $sent = FALSE;
  }
  fclose($this->sock);
  $this->log_write("Disconnected from remote hostn");
 }
 return $sent;
}

 /* Private Functions */
 function smtp_send($helo, $from, $to, $header, $body = ""){
  if (!$this->smtp_putcmd("HELO", $helo)){
   return $this->smtp_error("sending HELO command");
  }
  
  #auth
  if($this->auth){
   if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))){
    return $this->smtp_error("sending HELO command");
   }
   if (!$this->smtp_putcmd("", base64_encode($this->pass))){
    return $this->smtp_error("sending HELO command");
   }
  }
  if (!$this->smtp_putcmd("MAIL", "FROM:")){
   return $this->smtp_error("sending MAIL FROM command");
  }
  if (!$this->smtp_putcmd("RCPT", "TO:")){
   return $this->smtp_error("sending RCPT TO command");
  }
  if (!$this->smtp_putcmd("DATA")){
   return $this->smtp_error("sending DATA command");
  }
  if (!$this->smtp_message($header, $body)){
   return $this->smtp_error("sending message");
  }
  if (!$this->smtp_eom()){
   return $this->smtp_error("sending . [EOM]");
  }
  if (!$this->smtp_putcmd("QUIT")){
   return $this->smtp_error("sending QUIT command");
  }
  return TRUE;
 }

 function smtp_sockopen($address){
  if ($this->relay_host == ""){
   return $this->smtp_sockopen_mx($address);
  }
  else{
   return $this->smtp_sockopen_relay();
  }
 }

 function smtp_sockopen_relay(){
  $this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."n");
  $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
  if (!($this->sock && $this->smtp_ok())){
   $this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."n");
   $this->log_write("Error: ".$errstr." (".$errno.")n");
   return FALSE;
  }
  $this->log_write("Connected to relay host ".$this->relay_host."n");
  return TRUE;;
 }
 
 function smtp_sockopen_mx($address){
  $domain = ereg_replace("^.+@([^@]+)$", "1", $address);
  if (!@getmxrr($domain, $MXHOSTS)){
   $this->log_write("Error: Cannot resolve MX "".$domain.""n");
   return FALSE;
  }
  foreach ($MXHOSTS as $host){
   $this->log_write("Trying to ".$host.":".$this->smtp_port."n");
   $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
   if (!($this->sock && $this->smtp_ok())){
    $this->log_write("Warning: Cannot connect to mx host ".$host."n");
    $this->log_write("Error: ".$errstr." (".$errno.")n");
    continue;
   }
   $this->log_write("Connected to mx host ".$host."n");
   return TRUE;
  }
  $this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")n");
  return FALSE;
 }

 function smtp_message($header, $body){
  fputs($this->sock, $header."rn".$body);
  $this->smtp_debug("> ".str_replace("rn", "n"."> ", $header."n> ".$body."n> "));
  return TRUE;
 }
 
 function smtp_eom(){
  fputs($this->sock, "rn.rn");
  $this->smtp_debug(". [EOM]n");
  return $this->smtp_ok();
 }

 function smtp_ok(){
  $response = str_replace("rn", "", fgets($this->sock, 512));
  $this->smtp_debug($response."n");
  if (!ereg("^[23]", $response)){
   fputs($this->sock, "QUITrn");
   fgets($this->sock, 512);
   $this->log_write("Error: Remote host returned "".$response.""n");
   return FALSE;
  }
  return TRUE;
 }

 function smtp_putcmd($cmd, $arg = ""){
  if($arg != ""){
   if($cmd==""){
    $cmd = $arg;
   }
   else{
    $cmd = $cmd." ".$arg;
   }
  }
  fputs($this->sock, $cmd."rn");
  $this->smtp_debug("> ".$cmd."n");
  return $this->smtp_ok();
 }

 function smtp_error($string){
  $this->log_write("Error: Error occurred while ".$string.".n");
  return FALSE;
 }

 function log_write($message){
  $this->smtp_debug($message);
  if ($this->log_file == ""){
   return TRUE;
  }
  $message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
  if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))){
   $this->smtp_debug("Warning: Cannot open log file "".$this->log_file.""n");
   return FALSE;;
  }
  flock($fp, LOCK_EX);
  fputs($fp, $message);
  fclose($fp);
  return TRUE;
 }

 function strip_comment($address){//去除"()"
  $comment = "([^()]*)";
  while (ereg($comment, $address)){
   $address = ereg_replace($comment, "", $address);
  }
  return $address;
 }

 function get_address($address){
  $address = ereg_replace("([trn])+", "", $address);//t 制表符 r 回车符 n  换行符  +匹配前面的子表达式一次或多次
  $address = ereg_replace("^.*.*$", "1", $address);
  return $address;
 }

 function smtp_debug($message){
  if ($this->debug){
   echo $message;
  }
 }
}


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1655
14
Tutorial PHP
1255
29
Tutorial C#
1228
24
E-mel Outlook hilang daripada panel kawalan dalam Windows 11 E-mel Outlook hilang daripada panel kawalan dalam Windows 11 Feb 29, 2024 pm 03:16 PM

Adakah ikon mel Outlook tiada daripada Panel Kawalan Windows 11? Keadaan yang tidak dijangka ini telah menyebabkan kekeliruan dan kebimbangan di kalangan sesetengah individu yang bergantung pada OutlookMail untuk keperluan komunikasi mereka. Mengapa e-mel Outlook saya tidak dipaparkan dalam Panel Kawalan? Mungkin terdapat beberapa sebab yang mungkin mengapa tiada ikon mel Outlook dalam Panel Kawalan: Outlook tidak dipasang dengan betul. Memasang aplikasi Office daripada Microsoft Store tidak menambah applet Mel pada Panel Kawalan. Lokasi fail mlcfg32.cpl dalam Panel Kawalan tiada. Laluan ke fail mlcfg32.cpl dalam pendaftaran adalah salah. Sistem pengendalian tidak dikonfigurasikan pada masa ini untuk menjalankan aplikasi ini

Cantuman mel perkataan mencetak halaman kosong Cantuman mel perkataan mencetak halaman kosong Feb 19, 2024 pm 04:51 PM

Jika anda mendapati halaman kosong muncul apabila anda mencetak dokumen gabungan mel menggunakan Word, artikel ini akan membantu anda. Cantuman mel ialah ciri mudah yang membolehkan anda membuat dokumen diperibadikan dengan mudah dan menghantarnya kepada berbilang penerima. Dalam Microsoft Word, ciri gabungan mel dipandang tinggi kerana ia membantu pengguna menjimatkan masa menyalin kandungan yang sama secara manual untuk setiap penerima. Untuk mencetak dokumen gabungan mel, anda boleh pergi ke tab Mel. Tetapi sesetengah pengguna Word telah melaporkan bahawa apabila cuba mencetak dokumen gabungan mel, pencetak mencetak halaman kosong atau tidak mencetak langsung. Ini mungkin disebabkan oleh pemformatan atau tetapan pencetak yang salah. Cuba semak tetapan dokumen dan pencetak dan pastikan anda pratonton dokumen sebelum mencetak untuk memastikan kandungannya betul. jika

PHP menghantar e-mel secara tidak segerak: elakkan menunggu lama untuk e-mel dihantar. PHP menghantar e-mel secara tidak segerak: elakkan menunggu lama untuk e-mel dihantar. Sep 19, 2023 am 09:10 AM

PHP menghantar e-mel secara tidak segerak: elakkan menunggu lama untuk e-mel dihantar. Pengenalan: Dalam pembangunan web, menghantar e-mel adalah salah satu fungsi biasa. Namun, memandangkan penghantaran e-mel memerlukan komunikasi dengan pelayan, ia sering menyebabkan pengguna menunggu lama sementara menunggu e-mel dihantar. Untuk menyelesaikan masalah ini, kami boleh menggunakan PHP untuk menghantar e-mel secara tidak segerak untuk mengoptimumkan pengalaman pengguna. Artikel ini akan memperkenalkan cara melaksanakan PHP untuk menghantar e-mel secara tidak segerak melalui contoh kod tertentu dan mengelakkan menunggu lama. 1. Memahami menghantar e-mel secara tidak segerak

Bagaimana untuk menghantar fail kepada orang lain di TikTok? Bagaimana untuk memadam fail yang dihantar kepada orang lain? Bagaimana untuk menghantar fail kepada orang lain di TikTok? Bagaimana untuk memadam fail yang dihantar kepada orang lain? Mar 22, 2024 am 08:30 AM

Di Douyin, pengguna bukan sahaja boleh berkongsi butiran kehidupan dan bakat mereka, tetapi juga berinteraksi dengan pengguna lain. Dalam proses ini, kadangkala kita perlu menghantar fail kepada pengguna lain, seperti gambar, video, dll. Jadi, bagaimana untuk menghantar fail kepada orang lain di Douyin? 1. Bagaimana untuk menghantar fail kepada orang lain di Douyin? 1. Buka Douyin dan masukkan antara muka sembang di mana anda ingin menghantar fail. 2. Klik tanda "+" dalam antara muka sembang dan pilih "Fail". 3. Dalam pilihan fail, anda boleh memilih untuk menghantar gambar, video, audio dan fail lain. Selepas memilih fail yang ingin anda hantar, klik "Hantar". 4. Tunggu pihak lain menerima fail anda Setelah pihak lain menerimanya, fail tersebut akan berjaya dipindahkan. 2. Bagaimana untuk memadam fail yang dihantar kepada orang lain di Douyin? 1. Buka Douyin dan masukkan teks yang anda hantar.

Fungsi penjejakan e-mel PHP: memahami tingkah laku pengguna dan maklum balas tentang e-mel. Fungsi penjejakan e-mel PHP: memahami tingkah laku pengguna dan maklum balas tentang e-mel. Sep 19, 2023 am 08:51 AM

Fungsi penjejakan e-mel PHP: memahami tingkah laku pengguna dan maklum balas mengenai e-mel Dalam masyarakat moden, e-mel telah menjadi bahagian yang amat diperlukan dalam kehidupan dan pekerjaan harian orang ramai. Untuk perniagaan, menghantar e-mel adalah salah satu cara penting untuk berkomunikasi dengan pelanggan dan mempromosikan produk atau perkhidmatan. Walau bagaimanapun, selepas e-mel dihantar, bagaimana kita tahu sama ada ia diterima, dibaca atau bagaimana pengguna bertindak balas terhadap kandungan e-mel tersebut? Pada masa ini, fungsi penjejakan e-mel menjadi sangat penting. Fungsi penjejakan e-mel boleh membantu kami memahami tingkah laku pengguna dan maklum balas mengenai e-mel

Petua WhatsApp: Cara Menghantar Foto dan Video HD Petua WhatsApp: Cara Menghantar Foto dan Video HD Sep 10, 2023 am 10:13 AM

WhatsApp telah melancarkan pilihan baharu yang membolehkan pengguna menghantar foto dan video dalam resolusi tinggi melalui platform pemesejan. Baca terus untuk mengetahui cara ia dilakukan. WhatsApp telah mengeluarkan kemas kini yang membolehkan pengguna iPhone dan Android menghantar foto dan video dalam resolusi tinggi, akhirnya menangani had perkongsian media berkualiti rendah perkhidmatan tersebut. Pilihan itu dipanggil "Kualiti HD" dan bermakna pengguna boleh menghantar foto dan video yang lebih jelas dengan pemampatan minimum. Sebagai contoh, imej yang ditangkap pada iPhone kini boleh dihantar pada resolusi 3024x4032 dan bukannya maksimum sebelumnya 920x1280, manakala video boleh dihantar pada resolusi 1280x718 dan bukannya 848x476.

Apakah perbezaan antara versi pembangun dan versi awam iOS? Apakah perbezaan antara versi pembangun dan versi awam iOS? Mar 01, 2024 pm 12:55 PM

Setiap tahun sebelum Apple mengeluarkan versi utama baharu iOS dan macOS, pengguna boleh memuat turun versi beta beberapa bulan lebih awal untuk mengalaminya terlebih dahulu. Memandangkan perisian ini digunakan oleh orang awam dan pembangun, Apple telah melancarkan versi pembangun dan awam, yang merupakan versi beta awam bagi versi beta pembangun, untuk kedua-duanya. Apakah perbezaan antara versi pembangun dan versi awam iOS? Secara literal, versi pembangun ialah versi ujian pembangun dan versi awam ialah versi ujian awam. Versi pembangun dan versi awam menyasarkan khalayak yang berbeza. Versi pembangun digunakan oleh Apple untuk ujian oleh pembangun Anda memerlukan akaun pembangun Apple untuk memuat turun dan meningkatkannya.

Cara menggunakan transkripsi mel suara masa nyata pada iPhone Cara menggunakan transkripsi mel suara masa nyata pada iPhone Nov 18, 2023 pm 04:03 PM

Apakah transkripsi mel suara masa nyata? Transkripsi Mel Suara Langsung ialah ciri inovatif yang diperkenalkan dalam iOS 16 yang membolehkan pengguna iPhone melihat transkripsi langsung mel suara mereka semasa meninggalkannya. Ciri ini menggunakan teknologi pengecaman pertuturan lanjutan untuk menukar perkataan yang dituturkan kepada teks, menyediakan cara yang mudah dan boleh diakses untuk mengikuti perkembangan berita terkini tanpa perlu mendengarnya sepenuhnya. Faedah Menggunakan Transkripsi Mel Suara Langsung Transkripsi Mel Suara Langsung menawarkan beberapa kelebihan kepada pengguna iPhone: Peningkatan Produktiviti: Dengan menyediakan transkripsi masa nyata, Transkripsi Mel Suara Langsung menjimatkan masa dan usaha pengguna dengan menghapuskan keperluan untuk mendengar keseluruhan mel suara. Ini membolehkan pengguna mengimbas kandungan mel suara dengan cepat dan mengutamakan respons mereka. Kebolehcapaian untuk pengguna bermasalah pendengaran

See all articles