PHP实现发送邮件的方法(基于简单邮件发送类)_php技巧
本文实例讲述了PHP实现发送邮件的方法。分享给大家供大家参考,具体如下:
邮件发送类
<?php /*邮件发送类 *功能:使用smtp服务器发送邮件 */ class smtp { /* 全局变量 */ var $smtp_port; var $time_out; var $host_name; var $log_file; var $relay_host; var $debug; var $auth; var $user; var $pass; var $sock; /* 构造函数 */ function smtp($relay_host = "", $smtp_port = 25, $auth = false, $log_file="", $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 = $log_file; //邮件发送成功失败的日志记录文件 $this->sock = FALSE; } function mail_encode($str) { //return '=?utf-8?B?'.base64_encode(mb_convert_encoding($str, "GBK", "UTF-8")).'?='; return "=?UTF-8?B?".base64_encode($str)."?="; } /* 主函数,发送邮件 */ function sendmail($flag, $boundary, $to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") { $mail_from = $this->get_address ( $this->strip_comment ( $from ) ); $body = ereg_replace ( '(^|(\r\n))(\.)', "\1.\3", $body ); $header = "MIME-Version:1.0\r\n"; if ($mailtype == "HTML") { if ($flag == 2) { $header .= "Content-Type:multipart/mixed; boundary= $boundary\r\n"; } else { $header .= "Content-Type:text/html; charset=\"UTF-8\" \r\n"; } } $header .= "To: " . $to . "\r\n"; if ($cc != "") { $header .= "Cc: " . $cc . "\r\n"; } $header .= "From: $from<" . $from . ">\r\n"; $subject = self::mail_encode($subject); $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; } /* 私有函数 */ function smtp_send($helo, $from, $to, $header, $body = "") { if (! $this->smtp_putcmd ( "HELO", $helo )) { return $this->smtp_error ( "sending HELO command" ); } 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 = ereg_replace ( "^.+@([^@]+){1}quot;, "\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 (! ereg ( "^[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 ( ereg ( $comment, $address ) ) { $address = ereg_replace ( $comment, "", $address ); } return $address; } function get_address($address) { $address = ereg_replace ( "([ \t\r\n])+", "", $address ); $address = ereg_replace ( "^.*<(.+)>.*{1}quot;, "\1", $address ); return $address; } function smtp_debug($message) { if ($this->debug) { echo $message; } } } ?>
调用邮件发送类发送邮件
<?php //文件全路径名称,文件名称 function send_smtp_mail($file, $fileName) { require ("smtp_mail.php"); date_default_timezone_set ( 'Asia/Shanghai' ); $subject = date ( "Y-m-d" ) . "邮件标题"; //邮件标题 $content = "邮件内容!"; //邮件内容 //$file = "/a/b/c.txt"; //附件 //$fileName = "email_log.log"; //附件名称 $smtpserver = "服务器ip"; //SMTP服务器 $smtpserverport = 25; //SMTP服务器端口 $bcc = ""; //副收件人 //$smtpuser = ""; //SMTP服务器的用户帐号 //$smtppass = ""; //SMTP服务器的用户密码 $smtpmailfrom = "aaa@bbb.com"; //SMTP服务器的用户邮箱,邮件发送者 $smtpemailto = "邮箱1,邮箱2,邮箱3"; //邮件接受者 $cc = ""; //抄送 $mailsubject = $subject; //邮件主题 $mailtype = "HTML"; //邮件格式(HTML/TXT),TXT为文本邮件 $additional_headers = ""; $smtplogfile = ""; //发送邮件的日志文件,如果没有就不记录 // 定义分界线 $boundary = uniqid ( "" ); $headers = "Content-type: multipart/mixed; boundary= $boundary\r\n"; //附件类型 $mimeType = "application/unknown"; // 打开文件 $fp = fopen ( $file, "r" ); // 把整个文件读入一个变量 $read = fread ( $fp, filesize ( $file ) ); //我们用base64方法把它编码 $read = base64_encode ( $read ); //把这个长字符串切成由每行76个字符组成的小块 $read = chunk_split ( $read ); fclose ( $fp ); //关闭文件 /* 邮件发送代码 */ $flag = 1; //判断使用什么样的文件头1或2 if ($fileName == "") { //没有附件 $body = $content; } else { //有附件 $flag = 2; if ($mailtype == "HTML") { $body = "--$boundary\r\n"; //此必须 \n $body .= "Content-Type:text/html\r\n\r\n"; //此必须 \n\r\n $body .= "$content\r\n"; $body .= "--$boundary\r\n"; $body .= "Content-type: $mimeType; name=$fileName\r\n"; $body .= "Content-disposition: attachment; filename=$fileName\r\n"; $body .= "Content-Transfer-Encoding: BASE64\r\n\r\n"; $body .= "$read\r\n\r\n"; $body .= "--$boundary--\r\n"; } else { $body = "--$boundary\r\n"; $body .= "Content-type: Content-type: text/plain; charset=iso-8859-1\r\n\r\n"; $body .= "Content-transfer-encoding: 8bit\r\n\r\n"; $body .= "$content\r\n\r\n"; $body .= "--$boundary\r\n"; $body .= "Content-type: $mimeType; name=$fileName\r\n\r\n"; $body .= "Content-disposition: attachment; filename=$fileName\r\n\r\n"; $body .= "Content-transfer-encoding: base64\r\n\r\n"; $body .= "$read\r\n\r\n"; $body .= "--$boundary--\r\n"; } } $mailbody = $body; //邮件内容 //这里面的一个true是表示使用身份验证,否则不使用身份验证. $smtp = new smtp ( $smtpserver, $smtpserverport, false, $smtplogfile ); //$smtp->debug = TRUE;//是否显示发送的调试信息 if ($smtp->sendmail ( $flag, $boundary, $smtpemailto, $smtpmailfrom, $mailsubject, $mailbody, $mailtype, $cc, $bcc, $additional_headers )) { echo ("发送成功"); } else { echo ("发送失败"); } } ?>
希望本文所述对大家php程序设计有所帮助。

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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.

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

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,

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

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

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 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.
