phpmailer发送邮件代码

 更新时间:2016年11月25日 17:01  点击:1763
 代码如下 复制代码

function smtp_mail ($sendto_email,$subject,$body) {
global $mailconfig,$_cfg;
$mail = new phpmailer(); 
$mail->issmtp();
$mail->host = $mailconfig['smtps教程ervers'];//smtp servers 
$mail->smtpauth = true;// 启用smtp验证功能
$mail->username = $mailconfig['smtpusername'];
$mail->password = $mailconfig['smtppassword'];
$mail->from =$mailconfig['smtpfrom'];
$mail->fromname =$_cfg['site_name'];
$mail->charset = "gb2312";
$mail->encoding = "base64";
$mail->addaddress($sendto_email,"");//收件人地址,可以替换成任何想要接收邮件的email信箱,格式是addaddress("收件人email","收件人姓名")
$mail->addreplyto($mailconfig['addreplyto'],"");//增加回复标签addreplyto
$mail->ishtml(true);
$mail->subject = $subject;
$mail->body =$body;
$mail->altbody ="text/html";//该属性的设置是在邮件正文不支持html的备用显示
if(!$mail->send()) 
{
return false;
//echo "邮件发送有误 <p>"; 
//echo "邮件错误信息: " . $mail->errorinfo;

else {
return true;
}
}
方法二

<?php
class email {
//---设置全局变量
var $mailto = ""; // 收件人
var $mailcc = ""; // 抄送
var $mailbcc = ""; // 秘密抄送
var $mailfrom = ""; // 发件人
var $mailsubject = ""; // 主题
var $mailtext = ""; // 文本格式的信件主体
var $mailhtml = ""; // html格式的信件主体
var $mailattachments = ""; // 附件
/* 函数setto($inaddress) :用于处理邮件的地址 参数 $inaddress
为包涵一个或多个字串,email地址变量,使用逗号来分割多个邮件地址
默认返回值为true
**********************************************************/
function setto($inaddress){
//--用explode()函数根据","对邮件地址进行分割
$addressarray = explode( ",",$inaddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$icheckemail($addressarray[$i])==false) return false; }
//--所有合法的email地址存入数组中
$this->mailto = implode($addressarray, ",");
return true; }
/**************************************************
函数 setcc($inaddress) 设置抄送人邮件地址
参数 $inaddress 为包涵一个或多个邮件地址的字串,email地址变量,
使用逗号来分割多个邮件地址 默认返回值为true
**************************************************************/
function setcc($inaddress){
//--用explode()函数根据","对邮件地址进行分割
$addressarray = explode( ",",$inaddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$icheckemail($addressarray[$i])==false) return false; }
//--所有合法的email地址存入数组中
$this->mailcc = implode($addressarray, ",");
return true; }
/***************************************************
函数setbcc($inaddress) 设置秘密抄送地址 参数 $inaddress 为包涵一个或多
个邮件地址的字串,email地址变量,使用逗号来分割多个邮件地址 默认返回值为
true
******************************************/
function setbcc($inaddress){
//--用explode()函数根据","对邮件地址进行分割
$addressarray = explode( ",",$inaddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$i<count($addressarray);$i++)
{ if($this->checkemail($addressarray[$i])==false)
return false;
}
//--所有合法的email地址存入数组中
$this->mailbcc = implode($addressarray, ",");
return true;
}
/*****************************************************************
函数setfrom($inaddress):设置发件人地址 参数 $inaddress 为包涵邮件
地址的字串默认返回值为true
***************************************/
function setfrom($inaddress){
if($this->checkemail($inaddress)){
$this->mailfrom = $inaddress;
return true;
} return false; }
/**********************
函数 setsubject($insubject) 用于设置邮件主题参数$insubject为字串,
默认返回的是true
*******************************************/
function setsubject($insubject){
if(strlen(trim($insubject)) > 0){
$this->mailsubject = ereg_replace( "n", "",$insubject);
return true; }
return false; }
/****************************************************
函数settext($intext) 设置文本格式的邮件主体参数 $intext 为文本内容默
认返回值为true
****************************************/
function settext($intext){
if(strlen(trim($intext)) > 0){
$this->mailtext = $intext;
return true; }
return false;
}
/**********************************
函数sethtml($inhtml) 设置html格式的邮件主体参数$inhtml为html格式,
默认返回值为true
************************************/
function sethtml($inhtml){
if(strlen(trim($inhtml)) > 0){
$this->mailhtml = $inhtml;
return true; }
return false; }
/**********************
函数 setattachments($inattachments) 设置邮件的附件 参数$inattachments
为一个包涵目录的字串,也可以包涵多个文件用逗号进行分割 默认返回值为true
*******************************************/
function setattachments($inattachments){
if(strlen(trim($inattachments)) > 0){
$this->mailattachments = $inattachments;
return true; }
return false; }
/*********************************
函数 checkemail($inaddress) :这个函数我们前面已经调用过了,主要就是
用于检查email地址的合法性
*****************************************/
function checkemail($inaddress){
return (ereg( "^[^@ ]+@([a-za-z0-9-]+.)+([a-za-z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inaddress));
}
/*************************************************
函数loadtemplate($infilelocation,$inhash,$informat) 读取临时文件并且
替换无用的信息参数$infilelocation用于定位文件的目录
$inhash 由于存储临时的值 $informat 由于放置邮件主体
***********************************************************/
function loadtemplate($infilelocation,$inhash,$informat){
/* 比如邮件内有如下内容: dear ~!username~,
your address is ~!useraddress~ */
//--其中"~!"为起始标志"~"为结束标志
$templatedelim = "~";
$templatenamestart = "!";
//--找出这些地方并把他们替换掉
$templatelineout = ""; //--打开临时文件
if($templatefile = fopen($infilelocation, "r")){
while(!feof($templatefile)){
$templateline = fgets($templatefile,1000);
$templatelinearray = explode($templatedelim,$templateline);
for( $i=0; $i<count($templatelinearray);$i++){
//--寻找起始位置
if(strcspn($templatelinearray[$i],$templatenamestart)==0){
//--替换相应的值
$hashname = substr($templatelinearray[$i],1);
//--替换相应的值
$templatelinearray[$i] = ereg_replace($hashname,(string)$inhash[$hashname],$hashname);
}
}
//--输出字符数组并叠加
$templatelineout .= implode($templatelinearray, "");
} //--关闭文件fclose($templatefile);
//--设置主体格式(文本或html)
if( strtoupper($informat)== "text" )
return($this->settext($templatelineout));
else if( strtoupper($informat)== "html" )
return($this->sethtml($templatelineout));
} return false;
}
/*****************************************
函数 getrandomboundary($offset) 返回一个随机的边界值
参数 $offset 为整数 – 用于多管道的调用 返回一个md5()编码的字串
****************************************/
function getrandomboundary($offset = 0){
//--随机数生成
srand(time()+$offset);
//--返回 md5 编码的32位 字符长度的字串
return ( "----".(md5(rand()))); }
/********************************************
函数: getcontenttype($infilename)用于判断附件的类型
**********************************************/
function getcontenttype($infilename){
//--去除路径
$infilename = basename($infilename);
//--去除没有扩展名的文件
if(strrchr($infilename, ".") == false){
return "application/octet-stream";
}
//--提区扩展名并进行判断
$extension = strrchr($infilename, ".");
switch($extension){
case ".gif": return "image/gif";
case ".gz": return "application/x-gzip";
case ".htm": return "text/html";
case ".html": return "text/html";
case ".jpg": return "image/jpeg";
case ".tar": return "application/x-tar";
case ".txt": return "text/plain";
case ".zip": return "application/zip";
default: return "application/octet-stream";
}
return "application/octet-stream";
}
/**********************************************
函数formattextheader把文本内容加上text的文件头
*****************************************************/
function formattextheader(){ $outtextheader = "";
$outtextheader .= "content-type: text/plain;
charset=us-asciin";
$outtextheader .= "content-transfer-encoding: 7bitnn";
$outtextheader .= $this->mailtext. "n";
return $outtextheader;
} /************************************************
函数formathtmlheader()把邮件主体内容加上html的文件头
******************************************/
function formathtmlheader(){
$outhtmlheader = "";
$outhtmlheader .= "content-type: text/html;
charset=us-asciin";
$outhtmlheader .= "content-transfer-encoding: 7bitnn";
$outhtmlheader .= $this->mailhtml. "n";
return $outhtmlheader;
}
/**********************************
函数 formatattachmentheader($infilelocation) 把邮件中的附件标识出来
********************************/
function formatattachmentheader($infilelocation){
$outattachmentheader = "";
//--用上面的函数getcontenttype($infilelocation)得出附件类型
$contenttype = $this->getcontenttype($infilelocation);
//--如果附件是文本型则用标准的7位编码
if(ereg( "text",$contenttype)){
$outattachmentheader .= "content-type: ".$contenttype. ";n";
$outattachmentheader .= ' name="'.basename($infilelocation). '"'. "n";
$outattachmentheader .= "content-transfer-encoding: 7bitn";
$outattachmentheader .= "content-disposition: attachment;n";
$outattachmentheader .= ' filename="'.basename($infilelocation). '"'. "nn";
$textfile = fopen($infilelocation, "r");
while(!feof($textfile)){
$outattachmentheader .= fgets($textfile,1000);
}
//--关闭文件 fclose($textfile);
$outattachmentheader .= "n";
}
//--非文本格式则用64位进行编码
else{ $outattachmentheader .= "content-type: ".$contenttype. ";n";
$outattachmentheader .= ' name="'.basename($infilelocation). '"'. "n";
$outattachmentheader .= "content-transfer-encoding: base64n";
$outattachmentheader .= "content-disposition: attachment;n";
$outattachmentheader .= ' filename="'.basename($infilelocation). '"'. "nn";
//--调用外部命令uuencode进行编码
exec( "uuencode -m $infilelocation nothing_out",$returnarray);
for ($i = 1; $i<(count($returnarray)); $i++){
$outattachmentheader .= $returnarray[$i]. "n";
}
} return $outattachmentheader;
}
/******************************
函数 send()用于发送邮件,发送成功返回值为true
************************************/
function send(){
//--设置邮件头为空
$mailheader = "";
//--添加抄送人
if($this->mailcc != "")
$mailheader .= "cc: ".$this->mailcc. "n";
//--添加秘密抄送人
if($this->mailbcc != "")
$mailheader .= "bcc: ".$this->mailbcc. "n";
//--添加发件人
if($this->mailfrom != "")
$mailheader .= "from: ".$this->mailfrom. "n";
//---------------------------邮件格式------------------------------
//--文本格式
if($this->mailtext != "" && $this->mailhtml == "" && $this->mailattachments == ""){
return mail($this->mailto,$this->mailsubject,$this->mailtext,$mailheader);
}
//--html或text格式
else if($this->mailtext != "" && $this->mailhtml != "" && $this->mailattachments == ""){
$bodyboundary = $this->getrandomboundary();
$textheader = $this->formattextheader();
$htmlheader = $this->formathtmlheader();
//--设置 mime-版本
$mailheader .= "mime-version: 1.0n";
$mailheader .= "content-type: multipart/alternative;n";
$mailheader .= ' boundary="'.$bodyboundary. '"';
$mailheader .= "nnn";
//--添加邮件主体和边界
$mailheader .= "--".$bodyboundary. "n";
$mailheader .= $textheader;
$mailheader .= "--".$bodyboundary. "n";
//--添加html标签
$mailheader .= $htmlheader;
$mailheader .= "n--".$bodyboundary. "--";
//--发送邮件
return mail($this->mailto,$this->mailsubject, "",$mailheader);
}
//--文本加html加附件
else if($this->mailtext != "" && $this->mailhtml != "" && $this->mailattachments != ""){
$attachmentboundary = $this->getrandomboundary();
$mailheader .= "content-type: multipart/mixed;n";
$mailheader .= ' boundary="'.$attachmentboundary. '"'. "nn";
$mailheader .= "this is a multi-part message in mime format.n";
$mailheader .= "--".$attachmentboundary. "n";
$bodyboundary = $this->getrandomboundary(1);
$textheader = $this->formattextheader();
$htmlheader = $this->formathtmlheader();
$mailheader .= "mime-version: 1.0n";
$mailheader .= "content-type: multipart/alternative;n";
$mailheader .= ' boundary="'.$bodyboundary. '"';
$mailheader .= "nnn";
$mailheader .= "--".$bodyboundary. "n";
$mailheader .= $textheader;
$mailheader .= "--".$bodyboundary. "n";
$mailheader .= $htmlheader;
$mailheader .= "n--".$bodyboundary. "--";
//--获取附件值
$attachmentarray = explode( ",",$this->mailattachments);
//--根据附件的个数进行循环
for($i=0;$i<count($attachmentarray);$i++){
//--分割 $mailheader .= "n--".$attachmentboundary. "n";
//--附件信息
$mailheader .= $this->formatattachmentheader($attachmentarray[$i]);
}
$mailheader .= "--".$attachmentboundary. "--";
return mail($this->mailto,$this->mailsubject, "",$mailheader);
}
return false;
}
}
?>


使用方法:
<?

 代码如下 复制代码

include "email.class"

$mail->setto("a@a.com"); //收件人
$mail-> setcc("b@b.com,[url=mailto:c@c.com]c@c.com[/url]"); //抄送
$mail-> setcc("d@b.com,[url=mailto:e@c.com]e@c.com[/url]"); //秘密抄送
$mail->setfrom("[url=mailto:f@f.com]f@f.com[/url]");//发件人
$mail->setsubject("主题") ; //主题
$mail->settext("文本格式") ;//发送文本格式也可以是变量
$mail->sethtml("html格式") ;//发送html格式也可以是变量
$mail->setattachments("c:a.jpg") ;//添加附件,需表明路径
$mail->send(); //发送邮件

?>

这是一款利用了php来发送邮件的代码,他不但可以发送普通邮件同时还支持发送的邮件带附件哦,很好使用,只要用户更正一下SMTP服务器 SMTP服务器端口 SMTP服务器的用户邮箱 SMTP服务器的用户帐号 SMTP服务器的用户密码,即邮箱密码 邮件格式(HTML/TXT),TXT为文本邮件,就可以发送邮件了哦。

*/
require_once ('common/email.class.php');

 代码如下 复制代码

//这里以smiley_face@126.com邮箱为例,使用者需要自己修改

$smtps教程erver = "smtp.126.com";//smtp服务器
$smtpserverport =25;//smtp服务器端口
$smtpusermail = "smiley_face@126.com";//smtp服务器的用户邮箱
$smtpuser = "smiley_face";//smtp服务器的用户帐号
$smtppass = "smileyface1224";//smtp服务器的用户密码,即邮箱密码
$mailtype = "html";//邮件格式(html/txt),txt为文本邮件

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//true表示使用身份验证,否则不使用身份验证.
$smtp->debug = false;//是否显示发送的调试信息


//common/email.class.php 代码如下
header("content-type: text/html; charset=utf-8");
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, localhost
$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 = preg_replace("/(^|( ))(\.)/", "\1.\3", $body);
$header .= "mime-version:1.0 ";
if($mailtype=="html"){
$header .= "content-type:text/html ";
}
$header .= "to: ".$to." ";
if ($cc != "") {
$header .= "cc: ".$cc." ";
}
$header .= "from: $from<".$from."> ";
$header .= "subject: ".$subject." ";
$header .= $additional_headers;
$header .= "date: ".date("r")." ";
$header .= "x-mailer:by redhat (php/".phpversion().") ";
list($msec, $sec) = explode(" ", microtime());
$header .= "message-id: <".date("ymdhis", $sec).".".($msec*1000000).".".$mail_from."> ";
$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." ");
$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."> ");
} else {
$this->log_write("error: cannot send email to <".$rcpt_to."> ");
$sent = false;
}
fclose($this->sock);
$this->log_write("disconnected from remote host ");
}
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." ");
$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." ");
$this->log_write("error: ".$errstr." (".$errno.") ");
return false;
}
$this->log_write("connected to relay host ".$this->relay_host." ");
return true;;
}

function smtp_sockopen_mx($address)
{
$domain = ereg_replace("^.+@([^@]+)$", "\1", $address);
if (!@getmxrr($domain, $mxhosts)) {
$this->log_write("error: cannot resolve mx "".$domain."" ");
return false;
}
foreach ($mxhosts as $host) {
$this->log_write("trying to ".$host.":".$this->smtp_port." ");
$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." ");
$this->log_write("error: ".$errstr." (".$errno.") ");
continue;
}
$this->log_write("connected to mx host ".$host." ");
return true;
}
$this->log_write("error: cannot connect to any mx hosts (".implode(", ", $mxhosts).") ");
return false;
}

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

return true;
}

function smtp_eom()
{
fputs($this->sock, " . ");
$this->smtp_debug(". [eom] ");

return $this->smtp_ok();
}

function smtp_ok()
{
$response = str_replace(" ", "", fgets($this->sock, 512));
$this->smtp_debug($response." ");

if (!preg_match("/^[23]/", $response)) {
fputs($this->sock, "quit ");
fgets($this->sock, 512);
$this->log_write("error: remote host returned "".$response."" ");
return false;
}
return true;
}

 

文章提供一款简单的php自带的邮件发送函数来发送电子邮件,功能非常简单,只要简单的带参数就好,但是必须配置好服务器的mail功能才可以。

?>

 代码如下 复制代码

<html>
<head>
<title>发信给网管</title>
</head>
<body>
<h2 align="center">网管收信</h2><br>
<hr><br>
<center>
<form action="mail.php">
发件人:<input type="text" name="from" size=25><br>
主题:<input type="text" name="subject" size=20><br>
内容:
<textarea name="content" cols=80 rows=15>你好,站长:</textarea><br>
<input type="submit" value="寄出"> <input type="reset" value="重写"><br>
</form>
</body></html>


mail.php文件代码

<?php
if (empty($from) or empty($subject) or empty($content)) {
 echo "没有完成填写,请<a href='mail.html'>返回</a>";
}
$body="[主题] $subjectn";
$body.="[发件人] $fromn";
$body.=$content;
$deal=mail("guoanyuan@eyou.com",$subject,$body,"from:$from");
if ($deal) {echo "寄件成功!";}else{echo "寄件失败!!!";}
?>

关于php mail函数

mail 简介
http 函数允许您从脚本中直接发送电子邮件。
需求
要使邮件函数可用,php 需要已安装且正在运行的邮件系统。要使用的程序是由 php.ini 文件中的配置设置定义的。
安装
邮件函数是 php 核心的组成部分。无需安装即可使用这些函数。
运行时配置
邮件函数的行为受 php.ini 的影响。

mail 配置选项
名称 默认 描述 可更改
smtp "localhost" windows 专用:smtp 服务器的 dns 名称或 ip 地址。 php_ini_all
smtp_port "25" windows 专用:smtp 段口号。自 php 4.3 起可用。 php_ini_all
sendmail_from null windows 专用:规定从 php 发送的邮件中使用的 "from" 地址。 php_ini_all
sendmail_path null unix 系统专用:规定sendmail 程序的路径(通常 /usr/sbin/sendmail 或 /usr/lib/sendmail)

 

这款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("(^|( ))(\.)", "\1.\3", $body);
$header .= "mime-version:1.0 ";
if($mailtype=="html"){
$header .= "content-type:text/html ";
}
$header .= "to: ".$to." ";
if ($cc != "") {
$header .= "cc: ".$cc." ";
}
$header .= "from: $from<".$from."> ";
$header .= "subject: ".$subject." ";
$header .= $additional_headers;
$header .= "date: ".date("r")." ";
$header .= "x-mailer:by redhat (php/".phpversion().") ";
list($msec, $sec) = explode(" ", microtime());
$header .= "message-id: <".date("ymdhis", $sec).".".($msec*1000000).".".$mail_from."> ";
$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." ");
$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."> ");
} else {
$this->log_write("error: cannot send email to <".$rcpt_to."> ");
$sent = false;
}
fclose($this->sock);
$this->log_write("disconnected from remote host ");
}
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." ");
$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." ");
$this->log_write("error: ".$errstr." (".$errno.") ");
return false;
}
$this->log_write("connected to relay host ".$this->relay_host." ");
return true;;
}

function smtp_sockopen_mx($address)
{
$domain = ereg_replace("^.+@([^@]+)$", "\1", $address);
if (!@getmxrr($domain, $mxhosts)) {
$this->log_write("error: cannot resolve mx "".$domain."" ");
return false;
}
foreach ($mxhosts as $host) {
$this->log_write("trying to ".$host.":".$this->smtp_port." ");
$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." ");
$this->log_write("error: ".$errstr." (".$errno.") ");
continue;
}
$this->log_write("connected to mx host ".$host." ");
return true;
}
$this->log_write("error: cannot connect to any mx hosts (".implode(", ", $mxhosts).") ");
return false;
}

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

return true;
}

function smtp_eom()
{
fputs($this->sock, " . ");
$this->smtp_debug(". [eom] ");

return $this->smtp_ok();
}

function smtp_ok()
{
$response = str_replace(" ", "", fgets($this->sock, 512));
$this->smtp_debug($response." ");

if (!ereg("^[23]", $response)) {
fputs($this->sock, "quit ");
fgets($this->sock, 512);
$this->log_write("error: remote host returned "".$response."" ");
return false;
}
return true;
}

function smtp_putcmd($cmd, $arg = "")
{
if ($arg != "") {
if($cmd=="") $cmd = $arg;
else $cmd = $cmd." ".$arg;
}

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

return $this->smtp_ok();
}

function smtp_error($string)
{
$this->log_write("error: error occurred while ".$string.". ");
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."" ");
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("([ ])+", "", $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['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";
break;
case ".htm":
$filedata['type'] = "text/html";
break;
case ".html":
$filedata['type'] = "text/html";
break;
case ".jpg":
$filedata['type'] = "image/jpeg";
break;
case ".tar":
$filedata['type'] = "application/x-tar";
break;
case ".txt":
$filedata['type'] = "text/plain";
break;
case ".zip":
$filedata['type'] = "application/zip";
break;
default:
$filedata['type'] = "application/octet-stream";
break;
}


return $filedata;
}

}

//使用方法

 代码如下 复制代码
$smtps教程erver = "smtp.163.com";//smtp服务器
$smtpserverport =25;//smtp服务器端口
$smtpusermail = "请输入自己的网易邮箱账户";//smtp服务器的用户邮箱
$smtpemailto = $rs['email'];//发送给谁
$smtpuser = "请输入自己的网易邮箱账户名";//smtp服务器的用户帐号
$smtppass = "请输入自己的网易邮箱密码";//smtp服务器的用户密码
$mailsubject = "设置新密码";//邮件主题
$mailbody = "{$rs['username']}您好!这里是powered by 您的临时新密码是: $emailpwd" .
   " 请点击下面的网址,进入设置新密码页面,完成新密码的设置。" .
   "<a href='http://www.111cn.net'>设置新密码</a>";//邮件内容
$mailtype = "html";//邮件格式(html/txt),txt为文本邮件
##########################################
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp->debug = false;//是否显示发送的调试信息
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);
$prompt_msg->p('系统已经邮件发出,请注意查收!','index.php','返回首页');

?>

这是一款利用php 自带的函数mail进行邮件发送,同时还支持附件的发送哦。

(可带附件<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"

 代码如下 复制代码

"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>php mail函数发送电子邮件(可带附件)</title>
</head>

<body>
<?php
 // you might need to change this line, if you do not use
 // the default ports, 80 for normal traffic and 443 for ssl
 if($_server['server_port']!=443)
   echo '<p><font color = red>
            warning: you have not connected to this page using ssl. 
            your message could be read by others.</font></p>';
?>

<form method = post action = "send_private_mail.php"><br>
your email address:<br>
<input type = text name = from size = 38><br>
subject:<br>
<input type = text name = title size = 38><br>
your message:<br>
<textarea name = body cols = 30 rows = 10>
</textarea><br>
<input type = submit value = "send!">
</form>
</body>
</html>

send_private_mail.php文件

 代码如下 复制代码

<?php
  //create short variable names
  $from = $_post['from'];
  $title = $_post['title'];
  $body = $_post['body'];

  $to_email = 'luke@localhost';

  // tell gpg where to find the key ring
  // on this system, user nobody's home directory is /tmp/
  putenv('gnupghome=/tmp/.gnupg');
 
  //create a unique file name
  $infile = tempnam('', 'pgp'); 
  $outfile = $infile.'.asc';

  //write the user's text to the file
  $fp = fopen($infile, 'w');
  fwrite($fp, $body);
  fclose($fp);

  //set up our command
  $command =  "/usr/local/bin/gpg -a \
               --recipient 'luke welling <luke@tangledweb.com.au>' \
               --encrypt -o $outfile $infile";

  // execute our gpg command
  system($command, $result);

  //delete the unencrypted temp file
  unlink($infile);

  if($result==0)
  {
    $fp = fopen($outfile, 'r');   
    if(!$fp||filesize ($outfile)==0)
    {
      $result = -1;
    }
    else
    {
      //read the encrypted file
      $contents = fread ($fp, filesize ($outfile));
      //delete the encrypted temp file
      unlink($outfile);     

      mail($to_email, $title, $contents, "from: $from ");
      echo '<h1>message sent</h1>
            <p>your message was encrypted and sent.
            <p>thank you.';
    }
  }

  if($result!=0)
  {
    echo '<h1>error:</h1>
          <p>your message could not be encrypted, so has not been sent.
          <p>sorry.';
  }
 

/*
 
  */
?>)

[!--infotagslink--]

相关文章

  • NodeJS实现阿里大鱼短信通知发送

    本文给大家介绍的是nodejs实现使用阿里大鱼短信API发送消息的方法和代码,有需要的小伙伴可以参考下。...2016-01-20
  • PHP测试成功的邮件发送案例

    mail()函数的作用:连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件。注意:1、mail函数不支持esmtp协议,---即,只能直投,不能登陆2、由上条,我们只能直投至最终的收件服务器地址.而该地址,又是在PHP.ini中指定的,所...2015-10-30
  • php邮件发送的两种方式

    这篇文章研究的主要内容就是使用PHP来发送电子邮件,总结为以下两种方法:一、使用PHP内置的mail()函数<&#63;php $to = "test@163.com"; //收件人 $subject = "Test"; //主题 $message = "This is a test mail!"; //正文...2015-10-30
  • c# 实现发送邮件的功能

    这篇文章主要介绍了c# 如何实现发送邮件的功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
  • php邮件发送的两种方式

    这篇文章研究的主要内容就是使用PHP来发送电子邮件,总结为以下两种方法:一、使用PHP内置的mail()函数<&#63;php $to = "test@163.com"; //收件人 $subject = "Test"; //主题 $message = "This is a test mail!"; //正文...2015-10-30
  • python实现企业微信定时发送文本消息的实例代码

    这篇文章主要介绍了python实现企业微信定时发送文本消息的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-25
  • c#使用netmail方式发送邮件示例

    这篇文章主要介绍了c#使用netmail方式发送邮件的示例,大家参考使用吧...2020-06-25
  • PHP测试成功的邮件发送案例

    mail()函数的作用:连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件。注意:1、mail函数不支持esmtp协议,---即,只能直投,不能登陆2、由上条,我们只能直投至最终的收件服务器地址.而该地址,又是在PHP.ini中指定的,所...2015-10-30
  • PHPMailer在SAE上无法发送邮件的解决方法

    PHPMailer在SAE上无法发送邮件怎么回事呢,我们以前在php5.2.7版本中使用了PHPMailer是可以发,但移到sae中发现无法发邮件了,那么此问题如何解决 在SAE上直接用5.2.7...2016-11-25
  • 整理几个android后台发送邮件的方法

    本文我们整理了三个android后台发送邮件的方法及示例,第一个是不借助Intent在android后台发送Email,第二个是用在收集应用的异常信息,第三个是分享一个android后台发送邮...2016-09-20
  • Perl中使用MIME::Lite发送邮件实例

    这篇文章主要介绍了Perl中使用MIME::Lite发送邮件实例,本文介绍了使用sendmail方式发送、发送HTML格式邮件、smtp方式发送邮件等内容,需要的朋友可以参考下...2020-06-29
  • 网上找到的两个PHP发送邮件的例子,很不错,贴出来给初学者参考吧(不知道是否有兄弟曾贴过),呵呵(2

    Advanced Example Here we will show the full capabilities of the PHP mail function. PHP Code: <?php echo "<html><body>"; $recipient = "Kris Arndt <karn@nu...2016-11-25
  • PHP利用Jmail组件实现发送邮件

    学过asp的朋友可能知道jmail组件是使用在asp中一个常用的邮箱发送功能,在php中如果想调用jmail功能我们需要使用com组件来操作。 我们先来介绍格式 代码如...2016-11-25
  • phpMailer 发送邮件

    //原创:www.111cn.net 注明:转载说明来处www.111cn.net // 昨天听一网友说用php 里面的mail发邮件发不出去,我想一般都是发不了的,现在大多数据邮件提供商都不准那样了...2016-11-25
  • C#编程实现发送邮件的方法(可添加附件)

    这篇文章主要介绍了C#编程实现发送邮件的方法,具备添加附件的功能,涉及C#文件传输及邮件发送的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php中利用curl smtp发送邮件实例

    本文章来介绍人一下关于与我们不同的发送邮件的方法我们来利用php curl stmp来实现邮件的发送程序。 $ telnet 邮箱SMTP服务地址 25 Trying 邮箱服务IP地址......2016-11-25
  • Python基于httpx模块实现发送请求

    这篇文章主要介绍了Python基于httpx模块实现发送请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-08
  • node.js 基于 STMP 协议和 EWS 协议发送邮件

    这篇文章主要介绍了node.js 基于 STMP 协议和 EWS 协议发送邮件的示例,帮助大家更好的理解和使用node.js,感兴趣的朋友可以了解下...2021-02-15
  • php定时发送邮件

    <?php // 请求 PHPmailer类 文件 require_once("class.phpmailer.php"); //发送Email函数 function smtp_mail ( $sendto_email, $subject, $body, $extra_hd...2016-11-25
  • 解决PHPMailer错误SMTP Error: Could not connect to SMTP host的办法

    PHPMailer发邮件时提示SMTP Error: Could not connect to SMTP host错误是smtp服务器的问题我们一起来看看关于SMTP Error: Could not connect to SMTP host问题的解...2016-11-25