PHPメール送信クラス

WBOY
WBOYオリジナル
2016-06-23 14:30:24919ブラウズ


经测试 没有问题
class smtp
{
/* パブリック変数 */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $リレーホスト;
var $debug;
var $auth;
var $user;
var $pass;

/* プライベート変数 */
var $sock;

/* コンストラクター */
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; //fsockopen() で使用されます
#
$this->auth = $auth;//auth
$this->gt;user = $user;
$this->pass = $pass;
#
$ this->host_name = "ローカルホスト"; //HELO コマンドで使用されます
$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->gt;ストリップコメント($from));
$body = ereg_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.">/r/n";
$header .= "件名: ".$subject."/r/n";
$header .= $Additional_headers ;
$header .= "日付: ".date("r")."/r/n";
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")/r /n";
list($msec, $sec) =explode(" ", microtime());
$header .= "メッセージ 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("エラー: ".$rcpt_to" に電子メールを送信できません。 /n");
$sent = FALSE;
continue;
}
if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
$this ->log_write("電子メールが <".$rcpt_to.">/n");
} else {
$this->log_write("エラー: < に電子メールを送信できません。" .$rcpt_to.">/n");
$sent = FALSE;
}
fclose($this->sock);
$this->log_write("リモート ホストから切断されました/n");
}
echo "
";
echo $header;
return $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("sending HELO command") ;
}

if (!$this->smtp_putcmd("", Base64_encode($this->gt;pass))) {
return $this->smtp_error("HELO コマンドの送信");
}
}
#
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("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("を送信中。 [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 ("".$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->relay_host."/n に接続できません");
$this->log_write("エラー: ".$errstr." (".$errno.")/n ");
return FALSE;
}
$this->log_write("リレー ホスト ".$this->relay_host."/n");
return TRUE;;
}

function smtp_sockopen_mx($ address)
{
$domain = ereg_replace("^.+@([^@]+)$", "//1", $address);
if (!@getmxrr($domain, $MXHOSTS)) {
$this->log_write("エラー: MX /"".$domain."/"/n");
return FALSE;
}
foreach ($MXHOSTS as $host) {
$this-> ;log_write("".$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");
continue;
}
$ this->log_write("mx ホスト ".$host."/n");
return TRUE;
}
$this->log_write("エラー: どの mx ホストにも接続できません (".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("エラー: リモート ホストが /"".$response."/"/n");
return FALSE;
}
return TRUE;
}

function smtp_putcmd($cmd, $arg = "")
{
if ($arg != "") {
if($cmd=="") $cmd = $arg;
それ以外の場合は $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("エラー: ".$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("警告: ログ ファイル / を開けません"".$this-> ;log_file."/"/n");
return FALSE;
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);

return TRUE;
}

関数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", $address);

return $address;
}

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

function get_attach_type($image_tag) { //

$filedata = array();

$img_file_con=fopen($ image_tag,"r");
unset($image_data);
while ($tem_buffer=AddSlashes(fread($img_file_con,filesize($image_tag))))
$image_data.=$tem_buffer;
fclose($img_file_con);

$filedata['context'] = $image_data;
$filedata['filename']= Basename($image_tag);
$extension=substr($image_tag,strrpos($image_tag,"."),strlen($ image_tag)-strrpos($image_tag,"."));
switch($extension){
case ".gif":
$filedata['type'] = "image/gif";
Break;
case ". gz":
$filedata['type'] = "application/x-gzip";
ブレーク;
case ".htm":
$filedata['type'] = "text/html";
ブレーク;
case ".html":
$filedata['type'] = "text/html";
ブレーク;
ケース ".jpg":
$filedata['type'] = "image/jpeg";
ブレーク;
ケース".tar":
$filedata['type'] = "application/x-tar";
ブレーク;
case ".txt":
$filedata['type'] = "text/plain";
ブレーク;
case ".zip":
$filedata['type'] = "アプリケーション/zip";
ブレーク;
デフォルト:
$filedata['type'] = "アプリケーション/オクテットストリーム";
ブレーク;
}


return $filedata;
}

}


//################################# #########
$smtpserver = "smtp.163.com";//SMTP サービス务器
$smtpserverport =25;//SMTP サービス务器端末
$smtpusermail = "siren_0203@163.com";// SMTP サーバーの用人帐番号
$smtpemailto = "";//送信给谁
$smtpuser = "";//SMTP サーバーの用人帐号
$smtppass = "";//SMTP サーバーの用人秘密コード
$mailsubject = " asdfasdf";//邮件主题
$mailbody = "

これは 1 つの测试程序

";// 邮件の内容
$mailtype = "HTML";// 邮件格式 (HTML/TXT),TXT は文本邮件です
########### ###############################
$smtp = 新しい smtp($smtpserver,$smtpserverport,true,$smtpuser,$ smtppass);//このエリアの 1 つの true は、身身验证を使用しているかどうか、身柄不使用を示しているかどうかを示します。
$smtp->debug = true;// 送信の有無を示す调试情報
$smtp->sendmail($smtpemailto 、$smtpusermail、$mailsubject、$mailbody、$mailtype)
?>

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