Einfache Klasse zum Versenden von E-Mails in PHP

WBOY
Freigeben: 2016-08-08 09:33:35
Original
2726 Leute haben es durchsucht

sm.php

Klasse smtp
{
/* Öffentliche Variablen */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;

/* Private Variablen */
var $sock;

/* Auftragnehmer */
Funktion 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; //wird in fsockopen()
verwendet #
$this->auth = $auth;//auth
$this->user = $user;
$this->pass = $pass;
#
$this->host_name = "localhost"; //wird im HELO-Befehl verwendet
$this->log_file = "";

$this->sock = FALSE;
}

/* Hauptfunktion */
Funktion 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-Version:1.0rn";
if($mailtype=="HTML"){
$header .= "Content-Type:text/htmlrn";
}
$header .= "To: ".$to."rn";
if ($cc != "") {
$header .= "Cc: ".$cc."rn";
}
$header .= „Von: $from<“.$from.“>;rn“;
$header .= „Betreff: „.$subject.“rn“;
$header .= $additional_headers;
$header .= "Datum: ".date("r")."rn";
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")rn";
list($msec, $sec) = explosion(" ", microtime());
$header .= "Nachrichten-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">;rn";
$TO = explosion(",", $this->strip_comment($to));

if ($cc != "") {
$TO = array_merge($TO, explosion(",", $this->strip_comment($cc)));
}

if ($bcc != "") {
$TO = array_merge($TO, explosion(",", $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("Fehler: E-Mail kann nicht an ".$rcpt_to."n gesendet werden");
$sent = FALSE;
weiter;
}
if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
$this->log_write("E-Mail wurde an < gesendet.$rcpt_to.">;n");
} sonst {
$this->log_write("Fehler: E-Mail kann nicht an < gesendet werden.$rcpt_to.">;n");
$sent = FALSE;
}
fclose($this->sock);
$this->log_write("Vom Remote-Host getrennt");
}
return $sent;
}

/* Private Funktionen */

Funktion 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 ;;.;; [EOM]");
}

if (!$this->smtp_putcmd("QUIT")) {
return $this->smtp_error("sending QUIT command");
}

return TRUE;
}

Funktion smtp_sockopen($address)
{
if ($this->relay_host == "") {
return $this->smtp_sockopen_mx($address);
} sonst {
gib $this->smtp_sockopen_relay();
zurück }
}

Funktion smtp_sockopen_relay()
{
$this->log_write("Es wird versucht, ".$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("Fehler: Verbindung zum Relay-Host kann nicht hergestellt werden ".$this->relay_host."n");
$this->log_write("Fehler: ".$errstr." ("".$errno.")n");
return FALSE;
}
$this->log_write("Verbunden mit Relay-Host ".$this->relay_host."n");
return TRUE;
}

Funktion smtp_sockopen_mx($address)
{
$domain = ereg_replace("^. @([^@] )$", "\1", $address);
if (!@getmxrr($domain, $MXHOSTS)) {
$this->log_write("Fehler: MX kann nicht aufgelöst werden "".$domain.""n");
return FALSE;
}
foreach ($MXHOSTS als $host) {
$this->log_write("Versuch, ".$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("Warnung: Verbindung zum MX-Host ".$host."n" kann nicht hergestellt werden);
$this->log_write("Fehler: ".$errstr." ("".$errno.")n");
weiter;
}
$this->log_write("Verbunden mit MX-Host ".$host."n");
return TRUE;
}
$this->log_write("Fehler: Verbindung zu keinem MX-Host möglich ("".implode(", ", $MXHOSTS).")n");
return FALSE;
}

Funktion smtp_message($header, $body)
{
fputs($this->sock, $header."rn".$body);
$this->smtp_debug(">; ".str_replace("rn", "n".">; ", $header."n>; ".$body."n>; "));

return TRUE;
}

Funktion smtp_eom()
{
fputs($this->sock, "rn.rn");
$this->smtp_debug(". [EOM]n");

gib $this->smtp_ok();
zurück }

Funktion 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("Fehler: Remote-Host hat "".$response.""n");
zurückgegeben return FALSE;
}
return TRUE;
}

Funktion smtp_putcmd($cmd, $arg = "")
{
if ($arg != "") {
if($cmd=="") $cmd = $arg;
sonst $cmd = $cmd." ".$arg;
}

fputs($this->sock, $cmd."rn");
$this->smtp_debug(">; ".$cmd."n");

gib $this->smtp_ok();
zurück }

Funktion smtp_error($string)
{
$this->log_write("Fehler: Fehler aufgetreten während ".$string.".n");
return FALSE;
}

Funktion 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 (log_file">!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {
$this->smtp_debug("Warnung: Protokolldatei kann nicht geöffnet werden "".$this->log_file.""n");
return FALSE;
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);

return TRUE;
}

Funktion strip_comment($address)
{
$comment = "\([^()]*\)";
while (ereg($comment, $address)) {
$address = ereg_replace($comment, "", $address);
}

return $address;
}

Funktion get_address($address)
{
$address = ereg_replace("([ trn]) ", "", $address);
$address = ereg_replace("^.*<(. )>;.*$", "\1", $address);

return $address;
}

Funktion smtp_debug($message)
{
if ($this->debug) {
echo $message;
}
}
}
?>

mail.php

require("sm.php");
######################################
$smtpserver = "mail.asdf.com";//SMTP-Server
$smtpserverport =25;//SMTP-Server-Port
$smtpusermail = "asdf@asdf.com";//SMTP-Server-Benutzer-E-Mail
$smtpemailto = "asdf@QQ.com";//An wen gesendet werden soll
$smtpuser = "asdf@asdf.com";//SMTP-Server-Benutzerkonto
$smtppass = "asdf";//Benutzerpasswort des SMTP-Servers
$mailsubject = "Test Subject";//Mail-Betreff
$mailbody = "

;Dies ist eine Test-Mail

;";//Mail-Inhalt
$mailtype = "HTML";//E-Mail-Format (HTML/TXT), TXT ist Text-E-Mail
######################################
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//Ein true bedeutet hier, dass Authentifizierung verwendet wird, andernfalls wird keine Authentifizierung verwendet.
$smtp->debug = TRUE;//Ob die gesendeten Debugging-Informationen angezeigt werden sollen
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);

Das Obige stellt die einfache Klasse des E-Mail-Versands in PHP vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage