PHP多种形式发送邮件
1. 使用 mail() 函数
没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发。这个按照各个系统不同而定。使用参考手册。
2. 使用管道的形式
昨天刚测试成功,使用本地的qmail来发送邮件。
/* 使用qmail发送邮件函数 */
function send_check_mail($email, $subject,$uid,$buffer)
{
$command = "/var/qmail/bin/qmail-inject ".$email; //qmail程式地址,$email是要发送的地址
$handle = popen($command, "w"); //打开管道 http://www.cnblogs.com/roucheng/
if (!$handle) {
return false;
} $from = "webmaster@unixsky.net"; //发件人
fwrite($handle, "From: ".$from."\n"); //往管道写数据
fwrite($handle, "Return-Path: ".$from."\n");
fwrite($handle, "To: ".$uid."\n");
fwrite($handle, "Subject: ".$subject."\n");
fwrite($handle, "Mime-Version: 1.0\n");
fwrite($handle, "Content-Type: text/html; charset=\"gb2312\"\n\n");
fwrite($handle, $buffer."\n");
pclose($handle); //关闭管道 return true;
} ------------------测试发送邮件: //发送邮件 $subject = "测试邮件"; $uid = $_POST[’uid’]; //from信息
$content = "<html><body>".$u_email ." 你好!<br><br>谢谢,本邮件测试!<br</body></html>"; //内容信息 $u_email = "heiyeluren@yahoo.com.cn"; //发送到的邮箱
if (send_check_mail($u_email, $subject, $uid, $content)) { echo "恭喜!发送投票邮件到你的邮箱!<br><br>请检查你的邮箱:<font color=#CC0033>".$u_email." </font><br><br>". $close;
} else { echo "非常不幸,发送投票邮件到你的邮箱失败,请重试或联系研发人员。<br><br>". $close; }
当然,也能使用相同的方法来处理sendmail的进程来发送邮件。
下面代码示例:
<?php
$pp = popen("/usr/sbin/sendmail -t", "w") or die("Cannot fork sendmail");
fputs($pp, "To: sterling@designmultimedia.com\r\n");
fputs($pp, "Reply-to: $senders_email\r\n");
fputs($pp, "From: $senders_email\r\n");
fputs($pp, "Subject The Results of your form\r\n\r\n");
fputs($pp, "$senders_email sent the fllowing comments:\r\n");
fputs($pp, $comments);
pclose($pp) or die("Cannot close pipe to sendmail");
?>
其实这种管道的方法比较底层,取决于你所调用程式的稳定性。所以是一种可选的发送邮件的方式。
3. 使用phpmailer类
是个开源的发送邮件类,主站:http://phpmailer.sourceforge.net
里面是两个文件,一个是class.smtp.php,更有以个是class.phpmailer.php
另外加上官方网站的使用方法:
Examples using phpmailer
1. Advanced ExampleThis demonstrates sending out multiple email messages with binary attachments from a MySQL database with multipart/alternative support.
require("class.phpmailer.php"); $mail = new phpmailer(); $mail->From = "list@example.com";
$mail->FromName = "List manager";
$mail->Host = "smtp1.example.com;smtp2.example.com";
$mail->Mailer = "smtp"; @MYSQL_CONNECT("localhost","root","password");
@mysql_select_db("my_company");
$query?=?SELECT full_name, email,?hoto?ROM employee?HERE?d=$id";
$result??MYSQL_QUERY($query); while ($row = mysql_fetch_array ($result))
{
// HTML body
$body = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, <p>";
$body .= "<i>Your</i> personal photograph to this message.<p>";
$body .= "Sincerely, <br>";
$body .= "phpmailer List manager"; // Plain text body (for mail clients that cannot read HTML)
$text_body = "Hello " . $row["full_name"] . ", \n\n";
$text_body .= "Your personal photograph to this message.\n\n";
$text_body .= "Sincerely, \n";
$text_body .= "phpmailer List manager"; $mail->Body = $body;
$mail->AltBody = $text_body;
$mail->AddAddress($row["email"], $row["full_name"]);
$mail->AddStringAttachment($row["photo"], "YourPhoto.jpg"); if(!$mail->Send())
echo "There has been a mail error sending to " . $row["email"] . "<br>"; // Clear all addresses and attachments for next loop
$mail->ClearAddresses();
$mail->ClearAttachments();
}
2. Extending phpmailerExtending classes with inheritance is one of the most powerful features of object-oriented programming. It allows you to make changes to the original class for your own personal use without hacking the original classes. Plus, it is very easy to do. I’ve provided an example:
Here’s a class that extends the phpmailer class and sets the defaults for the particular site:
PHP include file: mail.inc.php
require("class.phpmailer.php");
class my_phpmailer extends phpmailer {
// Set default variables for all new objects
var $From = "from@example.com";
var $FromName = "Mailer";
var $Host = "smtp1.example.com;smtp2.example.com";
var $Mailer = "smtp"; // Alternative to IsSMTP()
var $WordWrap = 75; // Replace the default error_handler
function error_handler($msg) {
print("My Site Error");
print("Description:");
printf("%s", $msg);
exit;
} // Create an additional function
function do_something($something) {
// Place your new code here
}
}
Now here’s a normal PHP page in the site, which will have all the defaults set above:
Normal PHP file: mail_test.php
require("mail.inc.php"); // Instantiate your new class
$mail = new my_phpmailer; // Now you only need to add the necessary stuff
$mail->AddAddress("josh@example.com", "Josh Adams");
$mail->Subject = "Here is the subject";
$mail->Body = "This is the message body";
$mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip"); // optional name if(!$mail->Send())
{
echo "There was an error sending the message";
exit;
} echo "Message was sent successfully";
4. 使用PEAR::Net_SMTP组件
PEAR真是个好东西,可能非常多人都不怎么用,至少我目前使用他的DB类,发送邮件类都不错。
需要Net_SMTP类,能去 http://pear.php.net 下载,Net_SMTP类的使用手册:
http://pear.php.net/manual/en/package.networking.net-smtp.php
我使用上面几个类,这个是最佳的,不管是速度还是别的,不过操作涉及到一些简单的smtp协议。
http://www.cnblogs.com/roucheng/
我的使用代码:
//------------------------------------------ require_once ’Net/SMTP.php’; //加载类库 $subject = "测试邮件"; $uid = $_POST[’uid’]; //from信息
$content = "<html><body>".$u_email ." 你好!<br><br>谢谢,本邮件测试!<br</body></html>"; //内容信息 $u_email = "heiyeluren@yahoo.com.cn"; //发送到的邮箱 $smtp = new Net_SMTP(’192.168.0.1’); //smtp服务器
$smtp->connect(); //连接服务器
$smtp->helo(’unixsky.net’); //发送HELO信息给服务器
$smtp->mailFrom(’heiyeluren@unixsky.net’); //发件人地址
$smtp->rcptTo($u_email); //收件人地址
$date = date(’r’); //获取发信日期
$smtp->data("Date: $date\r\nFrom: vote@eyou.net\r\nTo: $u_email\r\nSubject: $subject\r\nContent-Type: text/html; charset=\"gb2312\"\r\n\r\n$content\r\n"); //添加发送数据并且发送
$smtp->disconnect(); //关闭连接
PHP多种形式发送邮件的更多相关文章
- 《PHP发送邮件PHPMailer》系列分享专栏
<PHP发送邮件PHPMailer>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201726.html 文章 PHPMailer ...
- JFinal项目发送邮件——jfinal-mail-plugin
JFianl框架: JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有 ...
- 利用SQLServer数据库发送邮件
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候.等等,,, 先 ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
- JavaMail发送邮件
发送邮件包含的内容有: from字段 --用于指明发件人 to字段 --用于指明收件人 subject字段 --用于说明邮件主题 cc字段 -- 抄送,将邮件发送给收件人的同时抄 ...
- 技术笔记:Indy控件发送邮件
工作中有个需求需要发送邮件,因为使用的delphi6,所以自然就选择了indy组件,想想这事挺简单的.实现的过程倒是简单,看着Indy的demo很快就完了,毕竟也不是很复杂的功能. 功能要求: 1.压 ...
- mono中发送邮件并保存本次收件人的地址
在ios端mono开发中,发送邮件可以选择调用ios原生email程序.有两种方式实现这种功能,一是程序跳转到ipad中email程序,另外一种是将发送邮件的界面在自己应用里弹出. 首先第一种方式的代 ...
- Azure 上通过 SendGrid 发送邮件
SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递. 并且具有可扩充性和实时分析的能力.常见的用例有: 自动回复用户的邮件 定期发送信息给用 ...
- 使用nodemailer发送邮件
今天闲来无事,一时兴起看了下如果使用javascript来发送邮件.经过调研发现,nodeJs可以实现这个功能. 具体的步骤如下: 1.安装依赖 npm install nodemailer -g ( ...
随机推荐
- [ZigBee] 11、ZigBee之睡眠定时器二
1.前言 上一节讲了Zigbee的睡眠定时器利用外部按键使系统从休眠态唤醒到工作态,其核心在于: 61 void SysPowerMode(uchar mode) 62 { 63 if(mode &g ...
- mysql --prompt
mysql --prompt修改命令行链接mysql时的提示符,shell脚本示例如下 #!/bin/bash in crm) cmd='mysql -h192.168.1.2 -uroot -pro ...
- Qt控制台中文乱码问题
本文主要记录了Qt控制台出现中文乱码的问题,一下列出了集中编码设置的方法.以前用VC6.0写的一个贪吃蛇的游戏,今天把源文件拿出来在Qt上面运行,出现中文乱码的问题.以前也遇到过,没想到小小的乱码,折 ...
- .net版本发展历史
最近装上了VS2013,发现好多新特性.新功能,公司办公还在使用VS2005.VS2008,不过用着也很顺手,在最新版Visual Studio中,微软加入了git源码管理工具,和之前的TFS大体上类 ...
- EF架构~DefaultValue让我的UnitOfWork更可读
回到目录 在编程世界里,使用“否定式”不是一件好事,因为它的可读性并不高,但有时,为了让使用者减少代码量,还是使用了双重否定,直到DefaultValue的出现,它改变了这一切,它可以为你的属性设置你 ...
- Hidden File For Mac
显示所有隐藏文件的方法: terminal中输入: defaults write com.apple.finder AppleShowAllFiles -bool true 同理,再次隐藏就输入: d ...
- Shader预处理宏、内置状态变量、多版本编译等
预定义shader预处理宏: Target platform: SHADER_API_OPENGL - desktop OpenGL SHADER_API_D3D9 - Direct3D SHADER ...
- Package gp in the OpenCASCADE
Package gp in the OpenCASCADE eryar@163.com China 一.简介 Introduction to Package gp gp是几何处理程序包(Geometr ...
- Shell最多可以输入多少个参数?
在脚本编写过程中,通常会涉及到参数的输入.譬如,sh 1.sh 10 20,在执行1.sh这个脚本中,10即为第一个参数,20即为第二个参数.有时,就会有这个疑惑,即shell脚本最多可以支持多少个变 ...
- UTL_FILE
在PL/SQL中,UTL_FILE包提供文本文件输入和输出功能. 可以访问的目录通过初始化参数UTL_FILE_DIR设置. 注意:UTL_FILE只能读取服务器端文本文件,不能读取二进制文件.这时候 ...