PHP メール送信、メール送信用の PHP クラス
Jun 13, 2016 pm 12:11 PM
smtp.class.php ファイルに保存するクラスです
コードをコピーします コードは次のとおりです。
<?php
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,$user,$pass)
{
$this->debug =間違い;
$this->smtp_port = $smtp_port;
$this->relay_host = $relay_host;
$this->time_out = 30; // fsockopen() で使用されます
#
$this->auth = $auth;//auth
$this->user = $user;
$this->pass = $pass;
#
$this->host_name = "localhost"; //HELO コマンドで使用されます
$this->log_file = "";
$this->靴下 = FALSE;
}
/* メイン関数 */
function sendmail($to, $from, $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 バージョン:1.0rn";
if($mailtype=="HTML"){
$header .= "Content-Type:text/htmlrn";
}
$header .= "宛先: ".$to."rn";
if ($cc != "") {
$header .= "Cc: ".$cc."rn";
}
$header .= "From: $from<".$from.">;rn";
$header .= "件名: ".$subject."rn";
$header .= $Additional_headers;
$header .= "日付: ".date("r")."rn";
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")rn";
list($msec, $sec) =explode(" ", microtime());
$header .= "メッセージ ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">gt;;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("エラー: ".$rcpt_to."n に電子メールを送信できません");
$sent = FALSE;
続き;
}
if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
$this->log_write("E-メールは <".$rcpt_to.">;n") に送信されました。
} else {
$this->log_write("エラー: <".$rcpt_to.">;n" に電子メールを送信できません");
$sent = FALSE;
}
fclose($this->sock);
$this->log_write("リモートホストnから切断されました");
}
$sent を返す;
}
/* プライベート関数 */
function smtp_send($helo, $from, $to, $header, $body = "")
{
if (!$this- >smtp_putcmd("HELO", $helo)) {
return $this->smtp_error("HELO コマンドを送信中");
}
#auth
if($this->auth){
if (!$this->smtp_putcmd("AUTH LOGIN", Base64_encode($this->user)) ) {
return $this->smtp_error("HELO コマンドを送信中");
}
if (!$this->smtp_putcmd("",base64_encode($this->pass))) {
return $this->smtp_error("HELO コマンドを送信中");
}
}
#
if (!$this->smtp_putcmd("MAIL", "FROM:>;")) {
return $this->smtp_error("MAIL FROM コマンドを送信中");
}
if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">;")) {
return $this->smtp_error( "RCPT TO コマンドを送信中");
}
if (!$this->smtp_putcmd("DATA")) {
return $this->smtp_error("DATA コマンドを送信中");
}
if (!$this->smtp_message($header, $body)) {
return $this->smtp_error("送信メッセージ");
}
if (!$this->smtp_eom()) {
return $this->smtp_error("送信中 <CR>;<LF>;.<CR>;< ;LF>[EOM]");
}
if (!$this->smtp_putcmd("QUIT")) {
return $this->smtp_error("QUIT コマンドを送信中");
}
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("".$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("エラー: リレー ホストに接続できません ".$this->リレーホスト."n");
$this->log_write("エラー: ".$errstr." (".$errno.")n");
FALSE を返します。
}
$this->log_write("リレー ホスト ".$this->relay_host."n に接続しました");
TRUE を返します。
}
function smtp_sockopen_mx($address)
{
$domain = ereg_replace("^. @([^@] )$", "\1", $address);
if (!@getmxrr($domain, $MXHOSTS)) {
$this->log_write("エラー: MX "".$domain.""n");
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("警告: mx ホスト ".$host" に接続できません。"n ");
$this->log_write("エラー: ".$errstr." (".$errno.")n");
続き;
}
$this->log_write("mx ホスト ".$host."n" に接続しました);
TRUE を返します。
}
$this->log_write("エラー: どの mx ホストにも接続できません (".implode(", ", $MXHOSTS).")n");
FALSE を返します。
}
function smtp_message($header, $body)
{
fputs($this->sock, $header."rn".$body);
$this->smtp_debug(">>; ".str_replace("rn", "n".">>; ", $header."n>; ".$body."n>; ") );
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("エラー: リモート ホストが "".$response.""n") を返しました。
FALSE を返します。
}
TRUE を返します。
}
function smtp_putcmd($cmd, $arg = "")
{
if ($arg != "") {
if($cmd=="") $cmd = $arg;
else $cmd = $cmd." ".$arg;
}
fputs($this->sock, $cmd."rn");
$this->smtp_debug(">gt;; ".$cmd."n");
return $this->smtp_ok();
}
関数 smtp_error($string)
{
$this->log_write("エラー: ".$string.".n" 中にエラーが発生しました");
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( "警告: ログ ファイルを開けません "".$this->log_file.""n");
FALSE を返します。
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);
TRUE を返します。
}
functionstrip_comment($address)
{
$comment = "\([^()]*\)";
while (ereg($comment, $address)) {
$address = ereg_replace($comment, "", $address);
}
$address を返す;
}
function get_address($address)
{
$address = ereg_replace("([ trn]) ", "", $address);
$address = ereg_replace("^.*<(. )>;.*$", "\1", $address);
$address を返す;
}
function smtp_debug($message)
{
if ($this->debug) {
echo $message;
}
}
}
function sendmail($smtpserver,$smtpuser,$smtppass,$smtpemailto,$smtpusermail, $mailsubject, $mailbody){
$smtp = new smtp($ smtpserver,25,true,$smtpuser,$smtppass);
//$smtp->debug = TRUE;
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, "HTML");
}
//
など//sendmail("smtp.126.com","test@126.com","password","1034555083@qq.com","test@126 .com","タイトル","本文");
?>
测试代码:
复制代码 代码如下:
<?
//OK メールで送信します。
include "smtp.class.php";
//$smtpserver = "SMTP.163.com" //SMTP サーバーのアドレス
$smtpserver="smtp.163.com";
$port =25; //SMTP サーバーのポート、通常は 25
$smtpuser = "Your email@163.com" //SMTP サーバーにログインするためのユーザー名
$smtppwd = " メール アドレスのパスワード"; //SMTP サーバーにログインするためのパスワード
$mailtype = "TXT" //メールの種類、オプションの値は TXT または HTML、TXT はプレーン テキスト メールを意味します。 , HTML とは、
$sender = "your email@163.com";
//送信者は、通常、smtp へのログインに使用するユーザー名 ($smtpuser) と同じである必要があります。そうしないと、smtp サーバーに起因するエラーが発生する可能性があります。この設定により送信が失敗します
$smtp = new smtp($smtpserver,$port,true,$smtpuser,$smtppwd,$sender); smtp->debug = true; //デバッグを有効にするかどうか。正式に使用する場合は、この行をコメントしてください。
$to = "送信先のメール アドレス" ; //受信者
$subject = "こんにちは";
$body = "送信内容"
$send=$smtp->sendmail($to,$sender,$subject,$body) ,$mailtype);
if( $send==1){
echo "メールの送信に失敗しました"
}else{
echo "メールの送信に失敗しました"; ;
//echo "理由:". $this->smtp->logs;

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法
