Maison développement back-end tutoriel php Exemple de code pour php smtp pour implémenter la fonction d'envoi d'e-mail

Exemple de code pour php smtp pour implémenter la fonction d'envoi d'e-mail

Jul 16, 2017 am 10:11 AM
php smtp 功能

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。跟大多数应用层协议一样,SMTP也存在两个 端:在发信人的邮件服务器上执行的客户端和在收信人的邮件服务器上执行的服务器端。SMTP的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服 务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。

SMTP协议与人们用于面对面交互的礼仪之间有许多相似之处。首先,运行在发送端邮件服务器主机上的SMTP客户,发起建立一个到运行在接收端邮件服务 器主机上的SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再尝试建立该连接。SMTP客户和服务器先执行一些应用层握手操作。就像人们在转手东西之前往往先自我介绍那样,SMTP客户和服务器也在传送信息之前先自我介绍一下。 在这个SMTP握手阶段,SMTP客户向服务器分别指出发信人和收信人的电子邮件地址。彼此自我介绍完毕之后,客户发出邮件消息。

本文实例为大家分享了php smtp发送邮件功能的具体代码,具体内容如下

<?php
header("Content-Type: text/html; charset=utf-8");
 
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, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
 {
  $mail_from = $this->get_address($this->strip_comment($from));
  $body = preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body);
  $header = "MIME-Version:1.0\r\n";
  if($mailtype=="HTML")
  {
   $header .= "Content-Type:text/html\r\n";
  }
  $header .= "To: ".$to."\r\n";
  if ($cc != "") 
  {
   $header .= "Cc: ".$cc."\r\n";
  }
  $header .= "From: $from<".$from.">\r\n";
  $header .= "Subject: ".$subject."\r\n";
  $header .= $additional_headers;
  $header .= "Date: ".date("r")."\r\n";
  $header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";
  list($msec, $sec) = explode(" ", microtime());
  $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n";
  $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 <".$rcpt_to.">\n");
   } 
   else 
   {
    $this->log_write("Error: Cannot send email to <".$rcpt_to.">\n");
    $sent = FALSE;
   }
   fclose($this->sock);
   $this->log_write("Disconnected from remote host\n");
  }
  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:<".$from.">")) 
  {
   return $this->smtp_error("sending MAIL FROM command");
  }
  if (!$this->smtp_putcmd("RCPT", "TO:<".$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 <CR><LF>.<CR><LF> [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 = preg_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."\r\n".$body);
  $this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));
  return TRUE;
 }
 
 function smtp_eom()
 {
  fputs($this->sock, "\r\n.\r\n");
  $this->smtp_debug(". [EOM]\n");
  return $this->smtp_ok();
 }
 
 function smtp_ok()
 {
  $response = str_replace("\r\n", "", fgets($this->sock, 512));
  $this->smtp_debug($response."\n");
  if (!preg_match("/^[23]/", $response)) 
  {
   fputs($this->sock, "QUIT\r\n");
   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."\r\n");
  $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 (preg_match($comment, $address)) 
  {
   $address = preg_replace($comment, "", $address);
  }
  return $address;
 }
 
 function get_address($address)
 {
  $address = preg_replace("/([ \t\r\n])+/", "", $address);
  $address = preg_replace("/^.*<(.+)>.*$/", "\1", $address);
  return $address;
 }
 
 function smtp_debug($message)
 {
  if ($this->debug) 
  {
   echo $message;
  }
 }
 
}
?>
Copier après la connexion

调用

<?php
header("Content-Type: text/html; charset=utf-8");
 
//引入发送邮件类
require("smtp.php");
//使用163邮箱服务器
$smtpserver = "smtp.163.com";
//163邮箱服务器端口
$smtpserverport = 25;
//你的163服务器邮箱账号
$smtpusermail = "xxx@163.com";
//收件人邮箱
$smtpemailto = "xxx@qq.com";
 
//你的邮箱账号(去掉@163.com)
$smtpuser = "xxx";//你的163邮箱去掉后面的163.com
//你的邮箱密码
$smtppass = "xxx"; //你的163邮箱SMTP的授权码,千万不要填密码!!!
 
//邮件主题
$mailsubject = "测试邮件发送";
//邮件内容
$mailbody = "PHP+MySQL";
//邮件格式(HTML/TXT),TXT为文本邮件
$mailtype = "TXT";
//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);
//是否显示发送的调试信息
$smtp->debug = TRUE;
//发送邮件
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);
 
?>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles