Rumah 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);
?>
Salin selepas log masuk

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


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

E-mel Outlook hilang daripada panel kawalan dalam Windows 11 E-mel Outlook hilang daripada panel kawalan dalam Windows 11 Feb 29, 2024 pm 03:16 PM

Adakah ikon mel Outlook tiada daripada Panel Kawalan Windows 11? Keadaan yang tidak dijangka ini telah menyebabkan kekeliruan dan kebimbangan di kalangan sesetengah individu yang bergantung pada OutlookMail untuk keperluan komunikasi mereka. Mengapa e-mel Outlook saya tidak dipaparkan dalam Panel Kawalan? Mungkin terdapat beberapa sebab yang mungkin mengapa tiada ikon mel Outlook dalam Panel Kawalan: Outlook tidak dipasang dengan betul. Memasang aplikasi Office daripada Microsoft Store tidak menambah applet Mel pada Panel Kawalan. Lokasi fail mlcfg32.cpl dalam Panel Kawalan tiada. Laluan ke fail mlcfg32.cpl dalam pendaftaran adalah salah. Sistem pengendalian tidak dikonfigurasikan pada masa ini untuk menjalankan aplikasi ini

PHP menghantar e-mel secara tidak segerak: elakkan menunggu lama untuk e-mel dihantar. PHP menghantar e-mel secara tidak segerak: elakkan menunggu lama untuk e-mel dihantar. Sep 19, 2023 am 09:10 AM

PHP menghantar e-mel secara tidak segerak: elakkan menunggu lama untuk e-mel dihantar. Pengenalan: Dalam pembangunan web, menghantar e-mel adalah salah satu fungsi biasa. Namun, memandangkan penghantaran e-mel memerlukan komunikasi dengan pelayan, ia sering menyebabkan pengguna menunggu lama sementara menunggu e-mel dihantar. Untuk menyelesaikan masalah ini, kami boleh menggunakan PHP untuk menghantar e-mel secara tidak segerak untuk mengoptimumkan pengalaman pengguna. Artikel ini akan memperkenalkan cara melaksanakan PHP untuk menghantar e-mel secara tidak segerak melalui contoh kod tertentu dan mengelakkan menunggu lama. 1. Memahami menghantar e-mel secara tidak segerak

Ucapkan selamat tinggal kepada protokol Slot Mel Jauh dalam Windows 11 Ucapkan selamat tinggal kepada protokol Slot Mel Jauh dalam Windows 11 Apr 14, 2023 pm 10:28 PM

Kami telah bercakap sejak kebelakangan ini tentang banyak ciri yang Microsoft merancang untuk ditambah pada sistem pengendalian terbaharunya, Windows 11. Tetapi jangan fikir bahawa Microsoft tidak akan menambah apa-apa dan mengambil apa-apa kembali. Malah, gergasi perisian itu mula mengalih keluar beberapa ciri lama. Selepas mengumumkan rancangan untuk melucutkan fungsi MSDT sebelum keluaran Windows 12, pembangun Redmond mempunyai lebih banyak berita buruk. Kami sebenarnya bercakap tentang alat warisan slot mel jauh. Percayai kami apabila kami mengatakan anda sebenarnya ingin mengetahui perkara ini. Microsoft telah mula menafikan ciri ini dalam binaan 25314. Kami pasti anda masih ingat bahawa hanya beberapa hari yang lalu, Microsoft mengeluarkan binaan 25314 dalam saluran kenari baharunya. Versi di atas mengandungi banyak ciri baharu

Cantuman mel perkataan mencetak halaman kosong Cantuman mel perkataan mencetak halaman kosong Feb 19, 2024 pm 04:51 PM

Jika anda mendapati halaman kosong muncul apabila anda mencetak dokumen gabungan mel menggunakan Word, artikel ini akan membantu anda. Cantuman mel ialah ciri mudah yang membolehkan anda membuat dokumen diperibadikan dengan mudah dan menghantarnya kepada berbilang penerima. Dalam Microsoft Word, ciri gabungan mel dipandang tinggi kerana ia membantu pengguna menjimatkan masa menyalin kandungan yang sama secara manual untuk setiap penerima. Untuk mencetak dokumen gabungan mel, anda boleh pergi ke tab Mel. Tetapi sesetengah pengguna Word telah melaporkan bahawa apabila cuba mencetak dokumen gabungan mel, pencetak mencetak halaman kosong atau tidak mencetak langsung. Ini mungkin disebabkan oleh pemformatan atau tetapan pencetak yang salah. Cuba semak tetapan dokumen dan pencetak dan pastikan anda pratonton dokumen sebelum mencetak untuk memastikan kandungannya betul. jika

Cara Membetulkan E-mel Outlook Terperangkap dalam Isu Peti Keluar Cara Membetulkan E-mel Outlook Terperangkap dalam Isu Peti Keluar May 01, 2023 am 10:01 AM

Baru-baru ini, ramai pengguna telah melaporkan isu e-mel Outlook tersekat dalam peti keluar. Walaupun selepas beberapa percubaan untuk menghantar e-mel, isu itu tidak dapat diselesaikan. Apabila anda melihat isu ini dan menyemak folder peti keluar anda, mesej akan tersekat di sana. Sebab yang mungkin untuk e-mel tersekat dalam peti keluar Outlook: Lampiran dalam e-mel melebihi had saiz, yang melambatkan proses penghantaran. Isu pengesahan akaun Outlook dengan pelayan mel Tetapan hantar/terima salah dalam Outlook atau pelayan mel Outlook luar talian. Fail data Outlook sedang digunakan oleh beberapa perisian lain. Perisian antivirus mengimbas e-mel keluar. Jika masalah ini telah mengganggu anda dan anda tidak dapat menghantar e-mel

Pratonton awam akan datang tidak lama lagi, termasuk apl Outlook terkini untuk Windows 11 dan Windows 10. Pratonton awam akan datang tidak lama lagi, termasuk apl Outlook terkini untuk Windows 11 dan Windows 10. May 09, 2023 am 08:07 AM

Sebagai sebahagian daripada mengemas kini apl asli untuk Windows 11, Microsoft merancang untuk mengeluarkan Outlook baharu. Aplikasi itu dibina dari bawah dan kini sedang disediakan untuk pratonton, yang mungkin akan diumumkan semasa acara hibrid Windows 11 Microsoft. Projek ini dipanggil "ProjectMonarch" dan Outlook baharu ini telah dibangunkan selama lebih setahun. Ini ialah but semula apl web yang bertujuan untuk menyatukan semua klien e-mel Windows sedia ada seperti Mel dan Kalendar serta versi desktop Outlook. Dengan OutlookOne, Microsoft berharap dapat membantu pengguna mengurus e-mel mereka merentas platform desktop yang berbeza. Terdapat banyak cara untuk mengakses

Fungsi penjejakan e-mel PHP: memahami tingkah laku pengguna dan maklum balas tentang e-mel. Fungsi penjejakan e-mel PHP: memahami tingkah laku pengguna dan maklum balas tentang e-mel. Sep 19, 2023 am 08:51 AM

Fungsi penjejakan e-mel PHP: memahami tingkah laku pengguna dan maklum balas mengenai e-mel Dalam masyarakat moden, e-mel telah menjadi bahagian yang amat diperlukan dalam kehidupan dan pekerjaan harian orang ramai. Untuk perniagaan, menghantar e-mel adalah salah satu cara penting untuk berkomunikasi dengan pelanggan dan mempromosikan produk atau perkhidmatan. Walau bagaimanapun, selepas e-mel dihantar, bagaimana kita tahu sama ada ia diterima, dibaca atau bagaimana pengguna bertindak balas terhadap kandungan e-mel tersebut? Pada masa ini, fungsi penjejakan e-mel menjadi sangat penting. Fungsi penjejakan e-mel boleh membantu kami memahami tingkah laku pengguna dan maklum balas mengenai e-mel

Cara menggunakan transkripsi mel suara masa nyata pada iPhone Cara menggunakan transkripsi mel suara masa nyata pada iPhone Nov 18, 2023 pm 04:03 PM

Apakah transkripsi mel suara masa nyata? Transkripsi Mel Suara Langsung ialah ciri inovatif yang diperkenalkan dalam iOS 16 yang membolehkan pengguna iPhone melihat transkripsi langsung mel suara mereka semasa meninggalkannya. Ciri ini menggunakan teknologi pengecaman pertuturan lanjutan untuk menukar perkataan yang dituturkan kepada teks, menyediakan cara yang mudah dan boleh diakses untuk mengikuti perkembangan berita terkini tanpa perlu mendengarnya sepenuhnya. Faedah Menggunakan Transkripsi Mel Suara Langsung Transkripsi Mel Suara Langsung menawarkan beberapa kelebihan kepada pengguna iPhone: Peningkatan Produktiviti: Dengan menyediakan transkripsi masa nyata, Transkripsi Mel Suara Langsung menjimatkan masa dan usaha pengguna dengan menghapuskan keperluan untuk mendengar keseluruhan mel suara. Ini membolehkan pengguna mengimbas kandungan mel suara dengan cepat dan mengutamakan respons mereka. Kebolehcapaian untuk pengguna bermasalah pendengaran

See all articles