ホームページ バックエンド開発 PHPチュートリアル PHP で電子メールを送信するメソッドは、単純な電子メール送信クラスに基づいています。

PHP で電子メールを送信するメソッドは、単純な電子メール送信クラスに基づいています。

Jul 29, 2016 am 09:10 AM
body gt return smtp this

本文实例讲述了PHP实现发送邮件的方法。分享给大家供大家参考,具体如下:

邮件发送类

<?php 
/*邮件发送类 
*功能:使用smtp服务器<strong>发送邮件</strong> 
*/ 
class smtp { 
 /* <strong>全局变量</strong> */ 
 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-&gt;debug = FALSE; 
  $this-&gt;smtp_port = $smtp_port; 
  $this-&gt;relay_host = $relay_host; 
  $this-&gt;time_out = 30; //is used in fsockopen() 
  $this-&gt;auth = $auth; //auth 
  $this-&gt;user = $user; 
  $this-&gt;pass = $pass; 
  $this-&gt;host_name = "localhost"; //is used in HELO command 
  $this-&gt;log_file = $log_file; //邮件发送成功失败的日志记录文件  
  $this-&gt;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)."?=";
 } 
 /* 主函数,<strong>发送邮件</strong> */ 
 function sendmail($flag, $boundary, $to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") { 
  $mail_from = $this-&gt;get_address ( $this-&gt;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&lt;" . $from . "&gt;\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: &lt;" . date ( "YmdHis", $sec ) . "." . ($msec * 1000000) . "." . $mail_from . "&gt;\r\n";  
  $TO = explode ( ",", $this-&gt;strip_comment ( $to ) );  
  if ($cc != "") { 
   $TO = array_merge ( $TO, explode ( ",", $this-&gt;strip_comment ( $cc ) ) ); 
  }  
  if ($bcc != "") { 
   $TO = array_merge ( $TO, explode ( ",", $this-&gt;strip_comment ( $bcc ) ) ); 
  }   
  $sent = TRUE;   
  foreach ( $TO as $rcpt_to ) { 
   $rcpt_to = $this-&gt;get_address ( $rcpt_to );   
   if (! $this-&gt;smtp_sockopen ( $rcpt_to )) { 
    $this-&gt;log_write ( "Error: Cannot send email to " . $rcpt_to . "\n" ); 
    $sent = FALSE; 
    continue; 
   }   
   if ($this-&gt;smtp_send ( $this-&gt;host_name, $mail_from, $rcpt_to, $header, $body )) { 
    $this-&gt;log_write ( "E-mail has been sent to &lt;" . $rcpt_to . "&gt;\n" ); 
   } else { 
    $this-&gt;log_write ( "Error: Cannot send email to &lt;" . $rcpt_to . "&gt;\n" ); 
    $sent = FALSE; 
   } 
   fclose ( $this-&gt;sock ); 
   $this-&gt;log_write ( "Disconnected from remote host\n" ); 
  } 
  return $sent; 
 } 
 /* 私有函数 */ 
 function smtp_send($helo, $from, $to, $header, $body = "") { 
  if (! $this-&gt;smtp_putcmd ( "HELO", $helo )) { 
   return $this-&gt;smtp_error ( "sending HELO command" ); 
  } 
  if ($this-&gt;auth) { 
   if (! $this-&gt;smtp_putcmd ( "AUTH LOGIN", base64_encode ( $this-&gt;user ) )) { 
    return $this-&gt;smtp_error ( "sending HELO command" ); 
   } 
   if (! $this-&gt;smtp_putcmd ( "", base64_encode ( $this-&gt;pass ) )) { 
    return $this-&gt;smtp_error ( "sending HELO command" ); 
   } 
  } 
  if (! $this-&gt;smtp_putcmd ( "MAIL", "FROM:&lt;" . $from . "&gt;" )) { 
   return $this-&gt;smtp_error ( "sending MAIL FROM command" ); 
  } 
  if (! $this-&gt;smtp_putcmd ( "RCPT", "TO:&lt;" . $to . "&gt;" )) { 
   return $this-&gt;smtp_error ( "sending RCPT TO command" ); 
  } 
  if (! $this-&gt;smtp_putcmd ( "DATA" )) { 
   return $this-&gt;smtp_error ( "sending DATA command" ); 
  } 
  if (! $this-&gt;smtp_message ( $header, $body )) { 
   return $this-&gt;smtp_error ( "sending message" ); 
  } 
  if (! $this-&gt;smtp_eom ()) { 
   return $this-&gt;smtp_error ( "sending &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt; [EOM]" ); 
  } 
  if (! $this-&gt;smtp_putcmd ( "QUIT" )) { 
   return $this-&gt;smtp_error ( "sending QUIT command" ); 
  } 
  return TRUE; 
 } 
 function smtp_sockopen($address) { 
  if ($this-&gt;relay_host == "") { 
   return $this-&gt;smtp_sockopen_mx ( $address ); 
  } else { 
   return $this-&gt;smtp_sockopen_relay (); 
  } 
 } 
 function smtp_sockopen_relay() { 
  $this-&gt;log_write ( "Trying to " . $this-&gt;relay_host . ":" . $this-&gt;smtp_port . "\n" ); 
  $this-&gt;sock = @fsockopen ( $this-&gt;relay_host, $this-&gt;smtp_port, $errno, $errstr, $this-&gt;time_out ); 
  if (! ($this-&gt;sock &amp;&amp; $this-&gt;smtp_ok ())) { 
   $this-&gt;log_write ( "Error: Cannot connenct to relay host " . $this-&gt;relay_host . "\n" ); 
   $this-&gt;log_write ( "Error: " . $errstr . " (" . $errno . ")\n" ); 
   return FALSE; 
  } 
  $this-&gt;log_write ( "Connected to relay host " . $this-&gt;relay_host . "\n" ); 
  return TRUE; 
 } 
 function smtp_sockopen_mx($address) { 
  $domain = ereg_replace ( "^.+@([^@]+){1}quot;, "\1", $address ); 
  if (! @getmxrr ( $domain, $MXHOSTS )) { 
   $this-&gt;log_write ( "Error: Cannot resolve MX \"" . $domain . "\"\n" ); 
   return FALSE; 
  } 
  foreach ( $MXHOSTS as $host ) { 
   $this-&gt;log_write ( "Trying to " . $host . ":" . $this-&gt;smtp_port . "\n" ); 
   $this-&gt;sock = @fsockopen ( $host, $this-&gt;smtp_port, $errno, $errstr, $this-&gt;time_out ); 
   if (! ($this-&gt;sock &amp;&amp; $this-&gt;smtp_ok ())) { 
    $this-&gt;log_write ( "Warning: Cannot connect to mx host " . $host . "\n" ); 
    $this-&gt;log_write ( "Error: " . $errstr . " (" . $errno . ")\n" ); 
    continue; 
   } 
   $this-&gt;log_write ( "Connected to mx host " . $host . "\n" ); 
   return TRUE; 
  } 
  $this-&gt;log_write ( "Error: Cannot connect to any mx hosts (" . implode ( ", ", $MXHOSTS ) . ")\n" ); 
  return FALSE; 
 } 
 function smtp_message($header, $body) { 
  fputs ( $this-&gt;sock, $header . "\r\n" . $body ); 
  $this-&gt;smtp_debug ( "&gt; " . str_replace ( "\r\n", "\n" . "&gt; ", $header . "\n&gt; " . $body . "\n&gt; " ) ); 
  return TRUE; 
 } 
 function smtp_eom() { 
  fputs ( $this-&gt;sock, "\r\n.\r\n" ); 
  $this-&gt;smtp_debug ( ". [EOM]\n" ); 
  return $this-&gt;smtp_ok (); 
 } 
 function smtp_ok() { 
  $response = str_replace ( "\r\n", "", fgets ( $this-&gt;sock, 512 ) ); 
  $this-&gt;smtp_debug ( $response . "\n" ); 
  if (! ereg ( "^[23]", $response )) { 
   fputs ( $this-&gt;sock, "QUIT\r\n" ); 
   fgets ( $this-&gt;sock, 512 ); 
   $this-&gt;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-&gt;sock, $cmd . "\r\n" ); 
  $this-&gt;smtp_debug ( "&gt; " . $cmd . "\n" ); 
  return $this-&gt;smtp_ok (); 
 } 
 function smtp_error($string) { 
  $this-&gt;log_write ( "Error: Error occurred while " . $string . ".\n" ); 
  return FALSE; 
 } 
 function log_write($message) { 
  $this-&gt;smtp_debug ( $message ); 
  if ($this-&gt;log_file == "") { 
   return TRUE; 
  } 
  $message = date ( "M d H:i:s " ) . get_current_user () . "[" . getmypid () . "]: " . $message; 
  if (! @file_exists ( $this-&gt;log_file ) || ! ($fp = @fopen ( $this-&gt;log_file, "a" ))) { 
   $this-&gt;smtp_debug ( "Warning: Cannot open log file \"" . $this-&gt;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 ( "^.*&lt;(.+)&gt;.*{1}quot;, "\1", $address );
  return $address;
 }
 function smtp_debug($message) {
  if ($this-&gt;debug) {
   echo $message;
  }
 }
}
?&gt;

ログイン後にコピー

调用邮件发送类发送邮件

&lt;&#63;php 
//文件全路径名称,文件名称 
function send_smtp_mail($file, $fileName) { 
 <strong>require</strong> ("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 = ""; //<strong>发送邮件</strong>的日志文件,如果没有就不记录 
 // 定义分界线 
 $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"; //此必须\r\n 
   $body .= "Content-Type:text/html\r\n\r\n"; //此必须\r\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-&gt;debug = TRUE;//是否显示发送的调试信息 
 if ($smtp-&gt;sendmail ( $flag, $boundary, $smtpemailto, $smtpmailfrom, $mailsubject, $mailbody, $mailtype, $cc, $bcc, $additional_headers )) { 
  echo ("发送成功"); 
 } else { 
  echo ("发送失败"); 
 } 
} 
?&gt;

ログイン後にコピー

希望本文所述对大家php程序设计有所帮助。

以上就介绍了PHP实现发送邮件的方法基于简单邮件发送类,包括了require,全局变量,发送邮件方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

Huawei GT3 ProとGT4の違いは何ですか?

C言語のreturnの使い方を詳しく解説 C言語のreturnの使い方を詳しく解説 Oct 07, 2023 am 10:58 AM

C言語のreturnの使い方を詳しく解説

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

修正: Windows 11 で Snipping ツールが機能しない

Javaのreturn文とfinally文の実行順序は何ですか? Javaのreturn文とfinally文の実行順序は何ですか? Apr 25, 2023 pm 07:55 PM

Javaのreturn文とfinally文の実行順序は何ですか?

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

iPhoneでApp Storeに接続できないエラーを修正する方法

PHPでSMTPメール機能を無効にする方法 PHPでSMTPメール機能を無効にする方法 Mar 22, 2023 pm 03:22 PM

PHPでSMTPメール機能を無効にする方法

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决

PHP を使用して SMTP プロトコルに基づいた電子メール通信を実装する方法 PHP を使用して SMTP プロトコルに基づいた電子メール通信を実装する方法 Jul 30, 2023 pm 04:45 PM

PHP を使用して SMTP プロトコルに基づいた電子メール通信を実装する方法

See all articles