Maison php教程 PHP源码 邮件操作类

邮件操作类

May 25, 2016 pm 05:15 PM

邮件操作类

<?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 = true;
$this->smtp_port = $smtp_port;
$this->relay_host = $relay_host;
$this->time_out = 30; 
$this->auth = $auth;
$this->user = $user;
$this->pass = $pass;
$this->host_name = "localhost"; 
$this->log_file ="";
$this->sock = FALSE;
} 
function sendmail($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")
{
$header .= "Content-Type:text/html\r\n";
}
 $header .= "To: ".$to."\r\n";
if ($cc != "")
{
$header .= "Cc: ".$cc."\r\n";
}
$header .= "From: $from<".$from.">\r\n";
$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");
}
echo "<br>";
echo $header;
return $sent;
}

/* Private Functions */

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

return $address;
}

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

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[&#39;context&#39;] = $image_data;
$filedata[&#39;filename&#39;]= basename($image_tag);
$extension=substr($image_tag,strrpos($image_tag,"."),strlen($image_tag)-strrpos($image_tag,"."));
switch($extension){
case ".gif":
$filedata[&#39;type&#39;] = "image/gif";
break;
case ".gz":
$filedata[&#39;type&#39;] = "application/x-gzip";
break;
case ".htm":
$filedata[&#39;type&#39;] = "text/html";
break;
case ".html":
$filedata[&#39;type&#39;] = "text/html";
break;
case ".jpg":
$filedata[&#39;type&#39;] = "image/jpeg";
break;
case ".tar":
$filedata[&#39;type&#39;] = "application/x-tar";
break;
case ".txt":
$filedata[&#39;type&#39;] = "text/plain";
break;
case ".zip":
$filedata[&#39;type&#39;] = "application/zip";
break;
default:
$filedata[&#39;type&#39;] = "application/octet-stream";
break;
}


return $filedata;
}
 }
?>

<?php

$smtpserver = "smtp.163.com";//SMTP服务器
$smtpserverport =25;//SMTP服务器端口
$smtpusermail = "caowlong163@163.com";//SMTP服务器的用户邮箱
$smtpemailto = "caowlong@qq.com";//发送给谁
$smtpuser = "caowlong163@163.com";//SMTP服务器的用户帐号
$smtppass = "XXX";//SMTP服务器的用户密码
$mailsubject = "PHP100测试邮件系统";//邮件主题
$mailbody = "<h1>你的用户名是张三,密码是11111 </h1>";//邮件内容
$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);
$smtp->debug = true;//是否显示发送的调试信息
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);
?>
Copier après la connexion

 以上就是邮件操作类的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

E-mails Outlook perdus du panneau de configuration dans Windows 11 E-mails Outlook perdus du panneau de configuration dans Windows 11 Feb 29, 2024 pm 03:16 PM

L'icône de messagerie Outlook est-elle absente du panneau de configuration de Windows 11 ? Cette situation inattendue a semé la confusion et l'inquiétude chez certaines personnes qui comptent sur OutlookMail pour leurs besoins de communication. Pourquoi mes e-mails Outlook n'apparaissent-ils pas dans le Panneau de configuration ? Il peut y avoir plusieurs raisons possibles pour lesquelles il n'y a pas d'icônes de messagerie Outlook dans le Panneau de configuration : Outlook n'est pas installé correctement. L'installation des applications Office à partir du Microsoft Store n'ajoute pas l'applet Mail au Panneau de configuration. L'emplacement du fichier mlcfg32.cpl dans le Panneau de configuration est manquant. Le chemin d'accès au fichier mlcfg32.cpl dans le registre est incorrect. Le système d'exploitation n'est actuellement pas configuré pour exécuter cette application

PHP envoie des emails de manière asynchrone : évitez les longues attentes pour l'envoi des emails. PHP envoie des emails de manière asynchrone : évitez les longues attentes pour l'envoi des emails. Sep 19, 2023 am 09:10 AM

PHP envoie des emails de manière asynchrone : évitez les longues attentes pour l'envoi des emails. Introduction : Dans le développement Web, l'envoi d'e-mails est l'une des fonctions courantes. Cependant, comme l’envoi d’e-mails nécessite une communication avec le serveur, cela oblige souvent les utilisateurs à attendre longtemps avant que l’e-mail soit envoyé. Afin de résoudre ce problème, nous pouvons utiliser PHP pour envoyer des e-mails de manière asynchrone afin d'optimiser l'expérience utilisateur. Cet article présentera comment implémenter PHP pour envoyer des e-mails de manière asynchrone à travers des exemples de code spécifiques et éviter de longues attentes. 1. Comprendre l'envoi d'e-mails de manière asynchrone

Dites adieu au protocole Remote Mail Slot dans Windows 11 Dites adieu au protocole Remote Mail Slot dans Windows 11 Apr 14, 2023 pm 10:28 PM

Nous avons parlé ces derniers temps des nombreuses fonctionnalités que Microsoft envisage d'ajouter à son dernier système d'exploitation, Windows 11. Mais ne pensez pas que Microsoft n’ajoutera rien et ne retirera rien. En fait, le géant du logiciel a commencé à supprimer un certain nombre d’anciennes fonctionnalités. Après avoir annoncé son intention de mettre hors service la fonctionnalité MSDT avant la sortie de Windows 12, un développeur de Redmond a encore de mauvaises nouvelles. Nous parlons en fait d’un outil hérité de fente de messagerie distante. Faites-nous confiance lorsque nous disons que vous voulez réellement savoir cela. Microsoft a commencé à déprécier cette fonctionnalité dans la build 25314. Nous sommes sûrs que vous vous souvenez qu'il y a quelques jours à peine, Microsoft a publié la build 25314 dans son nouveau canal Canary. La version ci-dessus contient de nombreuses nouvelles fonctionnalités

Le publipostage Word imprime une page blanche Le publipostage Word imprime une page blanche Feb 19, 2024 pm 04:51 PM

Si vous constatez que des pages vierges apparaissent lors de l'impression d'un document de publipostage à l'aide de Word, cet article vous aidera. Le publipostage est une fonctionnalité pratique qui vous permet de créer facilement des documents personnalisés et de les envoyer à plusieurs destinataires. Dans Microsoft Word, la fonctionnalité de fusion et publipostage est très appréciée car elle permet aux utilisateurs de gagner du temps en copiant manuellement le même contenu pour chaque destinataire. Afin d'imprimer le document de publipostage, vous pouvez accéder à l'onglet Mailings. Mais certains utilisateurs de Word ont signalé que lorsqu'ils essayaient d'imprimer un document de publipostage, l'imprimante imprimait une page vierge ou n'imprimait pas du tout. Cela peut être dû à un formatage ou à des paramètres d'imprimante incorrects. Essayez de vérifier les paramètres du document et de l'imprimante et assurez-vous de prévisualiser le document avant de l'imprimer pour vous assurer que le contenu est correct. si

Comment résoudre le problème de courrier électronique Outlook bloqué dans la boîte d'envoi Comment résoudre le problème de courrier électronique Outlook bloqué dans la boîte d'envoi May 01, 2023 am 10:01 AM

Récemment, de nombreux utilisateurs ont signalé le problème du blocage des e-mails Outlook dans la boîte d'envoi. Même après plusieurs tentatives d'envoi de l'e-mail, le problème n'a pas été résolu. Lorsque vous voyez ce problème et vérifiez votre dossier de boîte d'envoi, le message y restera bloqué. Raisons possibles pour lesquelles les e-mails restent bloqués dans la boîte d'envoi Outlook : Les pièces jointes de l'e-mail dépassent la taille limite, ce qui ralentit le processus d'envoi. Problèmes d'authentification du compte Outlook avec le serveur de messagerie Paramètres d'envoi/réception incorrects dans Outlook ou hors connexion du serveur de messagerie Outlook. Les fichiers de données Outlook sont utilisés par d'autres logiciels. Un logiciel antivirus analyse les e-mails sortants. Si ce problème vous dérange et que vous ne parvenez pas à envoyer un e-mail

Un aperçu public sera bientôt disponible, comprenant la dernière application Outlook pour Windows 11 et Windows 10. Un aperçu public sera bientôt disponible, comprenant la dernière application Outlook pour Windows 11 et Windows 10. May 09, 2023 am 08:07 AM

Dans le cadre de la mise à jour des applications natives pour Windows 11, Microsoft prévoit de publier un nouveau Outlook. L'application a été conçue à partir de zéro et est actuellement en préparation pour une version préliminaire, qui sera probablement annoncée lors de l'événement hybride Windows 11 de Microsoft. Le projet s'appelle "ProjectMonarch" et ce nouveau Outlook est en développement depuis plus d'un an. Il s'agit d'une relance de l'application Web qui vise à unifier tous les clients de messagerie Windows existants tels que Mail et Calendrier ainsi que la version de bureau d'Outlook. Avec OutlookOne, Microsoft espère aider les utilisateurs à gérer leur courrier électronique sur différentes plates-formes de bureau. Il existe de nombreuses façons d'accéder

Fonction de suivi des e-mails PHP : comprenez le comportement des utilisateurs et les commentaires sur les e-mails. Fonction de suivi des e-mails PHP : comprenez le comportement des utilisateurs et les commentaires sur les e-mails. Sep 19, 2023 am 08:51 AM

Fonction de suivi des e-mails PHP : comprendre le comportement des utilisateurs et les commentaires sur les e-mails Dans la société moderne, l'e-mail est devenu un élément indispensable de la vie quotidienne et du travail des gens. Pour les entreprises, l’envoi d’e-mails est l’un des moyens importants de communiquer avec les clients et de promouvoir des produits ou des services. Cependant, après l’envoi d’un e-mail, comment savoir s’il a été reçu, lu ou comment l’utilisateur a réagi au contenu de l’e-mail ? À l’heure actuelle, la fonction de suivi des e-mails devient particulièrement importante. La fonction de suivi des e-mails peut nous aider à comprendre le comportement des utilisateurs et les commentaires sur les e-mails.

Comment utiliser la transcription de la messagerie vocale en temps réel sur iPhone Comment utiliser la transcription de la messagerie vocale en temps réel sur iPhone Nov 18, 2023 pm 04:03 PM

Qu’est-ce que la transcription des messages vocaux en temps réel ? La transcription en direct de la messagerie vocale est une fonctionnalité innovante introduite dans iOS 16 qui permet aux utilisateurs d'iPhone d'afficher une transcription en direct de leur messagerie vocale tout en la quittant. Cette fonctionnalité utilise une technologie avancée de reconnaissance vocale pour convertir les mots prononcés en texte, offrant ainsi un moyen pratique et accessible de rester au courant des dernières nouvelles sans avoir à les écouter entièrement. Avantages de l'utilisation de la transcription de messagerie vocale en direct La transcription de messagerie vocale en direct offre plusieurs avantages aux utilisateurs d'iPhone : Productivité améliorée : en fournissant une transcription en temps réel, la transcription de messagerie vocale en direct fait gagner du temps et des efforts aux utilisateurs en éliminant le besoin d'écouter l'intégralité de la messagerie vocale. Cela permet aux utilisateurs d'analyser rapidement le contenu des messages vocaux et de prioriser leurs réponses. Accessibilité pour les utilisateurs malentendants

See all articles