<?php
//发送邮件的类
class Smtp
{
/* Public Variables */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;
/* Private Variables */
var $sock;
/* Constractor */
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; //is used in fsockopen()
#
$this->auth = $auth;//auth
$this->user = $user;
$this->pass = $pass;
#
$this->host_name = "localhost"; //is used in HELO command
$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->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");
}
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;
}
}
function attachment($attachment = '', $attachment_filename = ''){
if (!empty($attachment)) {
$filename = empty($attachment_filename) ? basename($attachment) : $attachment_filename ;
$path = dirname($attachment);
$file = $path.'/'.$filename;
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
$header = "--".$uid."\r\n";
$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use diff. tyoes here
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$header .= $content."\r\n\r\n";
$header .= "--".$uid."--";
return $header;
}else {
return '';
}
}
}
//$smtpserver = "smtp.takoo.com.cn";//SMTP服务器
//$smtpserverport =25;//SMTP服务器端口
//$smtpusermail = "takoo@takoo.com.cn";//SMTP服务器的用户邮箱
//$smtpemailto = "648036889@qq.com";//发送给谁
//$smtpuser = "takoo@takoo.com.cn";//SMTP服务器的用户帐号
//$smtppass = "*****";//SMTP服务器的用户密码
//$mailsubject = "测试邮件主题";//邮件主题
//$mailbody = "<h1>测试邮件的内容</h1>";//邮件内容
//$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
//$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
//$smtp->debug = false;//是否显示发送的调试信息
//$attachment=$smtp->attachment(dirname(__FILE__).'/images/index1_01.gif');//附件
//echo $smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype, $smtpusermail,$smtpusermail,$attachment);
?>
分享到:
相关推荐
电子邮件开发应用是一个涵盖广泛的主题,它涉及到如何使用编程语言创建、发送、接收和管理电子邮件。在本文中,我们将深入探讨电子邮件开发的相关知识点,包括SMTP、POP3、IMAP协议、邮件编码、邮件验证以及常见的...
在PHP网络开发中,电子邮件开发是一项重要的技能,它允许开发者创建功能丰富的邮件系统,用于发送通知、确认订单、用户注册验证等。这个压缩包“PHP网络开发--电子邮件开发(源码).rar”包含了实现这一功能的相关源...
电子邮件系统开发是一个复杂而关键的过程,它涉及到网络通信、数据安全、用户界面设计等多个方面的技术。在本讨论中,我们将深入探讨电子邮件系统的核心组件、工作原理以及开发过程中的关键技术。 一、电子邮件系统...
描述Vue.js真是太棒了,所以让我们用它来构建HTML电子邮件并为HTML电子邮件开发带来一些乐趣。 创建HTML电子邮件意味着对通常不支持当今基本Web标准的基于桌面和基于Web的电子邮件客户端进行编码。 解决方案是像1999...
Bojler是一个专门为电子邮件设计的模板框架,它旨在帮助开发者创建在各种电子邮件客户端...通过理解和使用"Slicejack-bojler-29b30ec"中的资源,你可以提升你的电子邮件开发技能,并为你的项目带来高质量的邮件设计。
印加人-电子邮件开发和交易传递工作流程 基本 桌子大乱糟糟了。 Inker提供了创建健全的电子邮件模板并保持干净的代码库的所有机制。 文档 墨者为: 编码 建立在Zurb墨水之上 Sane CSS组件结构 具有Sane HTML组件...
接下来,内联CSS是电子邮件开发中一个重要的概念。由于大多数电子邮件客户端不支持外部样式表,为了确保邮件在各种客户端中的一致显示,需要将CSS样式写入HTML元素内部。这可以通过内联样式属性完成,或者使用工具将...
### 一、Golang在电子邮件开发中的优势 1. **性能**: Go语言以其高效和并发能力闻名,使得处理大量邮件发送任务变得轻松快速。 2. **简洁的语法**: Go的语法简洁明了,易于阅读和编写,降低了开发复杂性的门槛。 3....
毕业设计,基于C#+Winform开发的电子邮件收发系统,内含完整源代码,数据库,毕业论文 电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大用户接受。早期的电子邮件只是从一个计算机终端向另外一个...
HTML电子邮件开发框架 关于 注意:此存储库包含Maizzle框架的核心代码。 如果您想使用Maizzle构建HTML电子邮件,请访问。 Maizzle是一个框架,可帮助您使用快速构建HTML电子邮件。 文献资料 有关Maizzle文档,请...
书中还包含了如何解决电子邮件问题的策略,如何评估标准和协议的不同实现,以及如何应对电子邮件开发中的挑战。作者通过清晰的解释和实例,帮助读者更好地理解和掌握相关知识。 对于开发者来说,本书不仅提供了协议...
UML(统一建模语言)是软件开发中的一个重要工具,用于系统分析和设计,特别是复杂系统如电子邮件系统的建模。本篇文章将深入探讨电子邮件系统UML设计的关键知识点。 首先,我们来看**用例图(Use Case Diagram)**...
Java开发的电子邮件Web客户端是一种基于Java技术构建的网络应用程序,允许用户通过Web浏览器访问和管理他们的电子邮件。这种客户端通常利用SMTP(Simple Mail Transfer Protocol)和IMAP(Internet Message Access ...
电子邮件发送在IT行业中是一项基础但至关重要的技术,尤其在企业通信和自动化流程中扮演着重要角色。本资源“电子邮件发送.rar”包含与ASP.NET相关的源码,提供了两种不同的方法来实现电子邮件的发送:SMTP(Simple ...
项目还利用了JMail组件,这是一个专为.NET框架设计的电子邮件处理库,但在某些情况下也可用于其他开发环境,如本案例中的Visual C++。JMail提供了高级的电子邮件处理功能,包括SMTP(简单邮件传输协议)和POP3(邮局...
电子邮件,简称为E-MAIL,是互联网上最基础且广泛使用的通信工具之一。自其诞生以来,电子邮件已经深深地改变了人们的沟通方式,无论是在个人生活中还是商业领域,它都扮演着至关重要的角色。以下将深入探讨电子邮件...