1. 使用 mail() 函数

没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发。这个按照各个系统不同而定。使用参考手册。

2. 使用管道的形式

昨天刚测试成功,使用本地的qmail来发送邮件。

  1. /* 使用qmail发送邮件函数 */
  2. function send_check_mail($email, $subject,$uid,$buffer)
  3. {
  4. $command = "/var/qmail/bin/qmail-inject ".$email; //qmail程式地址,$email是要发送的地址
  5. $handle = popen($command, "w"); //打开管道 http://www.cnblogs.com/roucheng/
  6. if (!$handle) {
  7. return false;
  8. }
  9.  
  10. $from = "webmaster@unixsky.net"; //发件人
  11. fwrite($handle, "From: ".$from."\n"); //往管道写数据
  12. fwrite($handle, "Return-Path: ".$from."\n");
  13. fwrite($handle, "To: ".$uid."\n");
  14. fwrite($handle, "Subject: ".$subject."\n");
  15. fwrite($handle, "Mime-Version: 1.0\n");
  16. fwrite($handle, "Content-Type: text/html; charset=\"gb2312"\n\n");
  17. fwrite($handle, $buffer."\n");
  18. pclose($handle); //关闭管道
  19.  
  20. return true;
  21. }
  22.  
  23. ------------------测试发送邮件:
  24.  
  25. //发送邮件
  26.  
  27. $subject = "测试邮件";
  28.  
  29. $uid = $_POST[’uid’]; //from信息
  30. $content = "<html><body>".$u_email
  31.  
  32. ." 你好!<br><br>谢谢,本邮件测试!<br</body></html>"; //内容信息
  33.  
  34. $u_email = "heiyeluren@yahoo.com.cn"; //发送到的邮箱
  35. if (send_check_mail($u_email, $subject, $uid, $content)) {
  36.  
  37. echo "恭喜!发送投票邮件到你的邮箱!<br><br>请检查你的邮箱:<font color=#CC0033>".$u_email." </font><br><br>". $close;
  38. } else {
  39.  
  40. echo "非常不幸,发送投票邮件到你的邮箱失败,请重试或联系研发人员。<br><br>". $close;
  41.  
  42. }

当然,也能使用相同的方法来处理sendmail的进程来发送邮件。

下面代码示例:

  1. <?php
  2. $pp = popen("/usr/sbin/sendmail -t", "w") or die("Cannot fork sendmail");
  3. fputs($pp, "To: sterling@designmultimedia.com\r\n");
  4. fputs($pp, "Reply-to: $senders_email\r\n");
  5. fputs($pp, "From: $senders_email\r\n");
  6. fputs($pp, "Subject The Results of your form\r\n\r\n");
  7. fputs($pp, "$senders_email sent the fllowing comments:\r\n");
  8. fputs($pp, $comments);
  9. pclose($pp) or die("Cannot close pipe to sendmail");
  10. ?>

其实这种管道的方法比较底层,取决于你所调用程式的稳定性。所以是一种可选的发送邮件的方式。

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.

  1. require("class.phpmailer.php");
  2.  
  3. $mail = new phpmailer();
  4.  
  5. $mail->From = "list@example.com";
  6. $mail->FromName = "List manager";
  7. $mail->Host = "smtp1.example.com;smtp2.example.com";
  8. $mail->Mailer = "smtp";
  9.  
  10. @MYSQL_CONNECT("localhost","root","password");
  11. @mysql_select_db("my_company");
  12. $query?=?SELECT full_name, email,?hoto?ROM employee?HERE?d=$id";
  13. $result??MYSQL_QUERY($query);
  14.  
  15. while ($row = mysql_fetch_array ($result))
  16. {
  17. // HTML body
  18. $body = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, <p>";
  19. $body .= "<i>Your</i> personal photograph to this message.<p>";
  20. $body .= "Sincerely, <br>";
  21. $body .= "phpmailer List manager";
  22.  
  23. // Plain text body (for mail clients that cannot read HTML)
  24. $text_body = "Hello " . $row["full_name"] . ", nn";
  25. $text_body .= "Your personal photograph to this message.\nn";
  26. $text_body .= "Sincerely, n";
  27. $text_body .= "phpmailer List manager";
  28.  
  29. $mail->Body = $body;
  30. $mail->AltBody = $text_body;
  31. $mail->AddAddress($row["email"], $row["full_name"]);
  32. $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");
  33.  
  34. if(!$mail->Send())
  35. echo "There has been a mail error sending to " . $row["email"] . "<br>";
  36.  
  37. // Clear all addresses and attachments for next loop
  38. $mail->ClearAddresses();
  39. $mail->ClearAttachments();
  40. }

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");

  1. class my_phpmailer extends phpmailer {
  2. // Set default variables for all new objects
  3. var $From = "from@example.com";
  4. var $FromName = "Mailer";
  5. var $Host = "smtp1.example.com;smtp2.example.com";
  6. var $Mailer = "smtp"; // Alternative to IsSMTP()
  7. var $WordWrap = 75;
  8.  
  9. // Replace the default error_handler
  10. function error_handler($msg) {
  11. print("My Site Error");
  12. print("Description:");
  13. printf("%s", $msg);
  14. exit;
  15. }
  16.  
  17. // Create an additional function
  18. function do_something($something) {
  19. // Place your new code here
  20. }
  21. }

Now here’s a normal PHP page in the site, which will have all the defaults set above: 
Normal PHP file: mail_test.php

  1. require("mail.inc.php");
  2.  
  3. // Instantiate your new class
  4. $mail = new my_phpmailer;
  5.  
  6. // Now you only need to add the necessary stuff
  7. $mail->AddAddress("josh@example.com", "Josh Adams");
  8. $mail->Subject = "Here is the subject";
  9. $mail->Body = "This is the message body";
  10. $mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip"); // optional name
  11.  
  12. if(!$mail->Send())
  13. {
  14. echo "There was an error sending the message";
  15. exit;
  16. }
  17.  
  18. 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/
我的使用代码:

  1. //------------------------------------------
  2.  
  3. require_once Net/SMTP.php’; //加载类库
  4.  
  5. $subject = "测试邮件";
  6.  
  7. $uid = $_POST[’uid’]; //from信息
  8. $content = "<html><body>".$u_email
  9.  
  10. ." 你好!<br><br>谢谢,本邮件测试!<br</body></html>"; //内容信息
  11.  
  12. $u_email = "heiyeluren@yahoo.com.cn"; //发送到的邮箱
  13.  
  14. $smtp = new Net_SMTP(’192.168.0.1’); //smtp服务器
  15. $smtp->connect(); //连接服务器
  16. $smtp->helo(’unixsky.net’); //发送HELO信息给服务器
  17. $smtp->mailFrom(’heiyeluren@unixsky.net’); //发件人地址
  18. $smtp->rcptTo($u_email); //收件人地址
  19. $date = date(’r’); //获取发信日期
  20. $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"); //添加发送数据并且发送
  21. $smtp->disconnect(); //关闭连接

PHP多种形式发送邮件的更多相关文章

  1. 《PHP发送邮件PHPMailer》系列分享专栏

    <PHP发送邮件PHPMailer>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201726.html 文章 PHPMailer ...

  2. JFinal项目发送邮件——jfinal-mail-plugin

    JFianl框架: JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有 ...

  3. 利用SQLServer数据库发送邮件

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候.等等,,, 先 ...

  4. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

  5. JavaMail发送邮件

    发送邮件包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄 ...

  6. 技术笔记:Indy控件发送邮件

    工作中有个需求需要发送邮件,因为使用的delphi6,所以自然就选择了indy组件,想想这事挺简单的.实现的过程倒是简单,看着Indy的demo很快就完了,毕竟也不是很复杂的功能. 功能要求: 1.压 ...

  7. mono中发送邮件并保存本次收件人的地址

    在ios端mono开发中,发送邮件可以选择调用ios原生email程序.有两种方式实现这种功能,一是程序跳转到ipad中email程序,另外一种是将发送邮件的界面在自己应用里弹出. 首先第一种方式的代 ...

  8. Azure 上通过 SendGrid 发送邮件

    SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递. 并且具有可扩充性和实时分析的能力.常见的用例有: 自动回复用户的邮件 定期发送信息给用 ...

  9. 使用nodemailer发送邮件

    今天闲来无事,一时兴起看了下如果使用javascript来发送邮件.经过调研发现,nodeJs可以实现这个功能. 具体的步骤如下: 1.安装依赖 npm install nodemailer -g ( ...

随机推荐

  1. 一天一小段js代码(no.2)

    (一)可以用下面js代码来检测弹出窗口是否被屏蔽: var blocked = false ; try { /*window.open()方法接受4个参数window.open(要加载的url,窗口目 ...

  2. Metro风格的Android界面应用

    最近项目中需要一个选择月份查询客户余额的功能,原先的android只能满足查询当月,不可以查询任意月份.当然改起来还是很简单的,服务端增加一个月份参数,客户端传入这个参数即可.闲来无事,月份的选择风格 ...

  3. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例

    引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...

  4. CentOS6.5下安装JDK

    之前一直没有完全的总结出一篇关于Linux下安装Java的过程,今天正好就整理下. 下载jdk 如果在官网下载比较慢,那么可以到我的云盘分享上,下载jdk 1.8.0的版本: 下载地址参考链接 解压缩 ...

  5. Atitit usrQBK13 html dsl 规范与解决方案

    Atitit usrQBK13 html dsl 规范与解决方案 1.1. Vue  vs anrular1 1.2. 定义html dsl变量1 1.3. 变量赋值1 1.4.  条件渲染指令1 2 ...

  6. iOS-数据持久化-SQlite3

    SQLite3简单介绍 1.ios中数据的存储方式 (1)Plist(NSArray\NSDictionary) (2)Preference(偏好设置\NSUserDefaults) (3)NSCod ...

  7. Android WebView 总结 —— Java和JavaScript交互

    交互如何实现 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方 ...

  8. cordova开发问题汇总

    cordova开发问题汇总 1. 导入工程的"The import android cannot be resolved"错误解决方法 2. MainActivity] Unabl ...

  9. Git使用相关

    Git使用相关 使用git这么久还是时不时碰到小问题,根本原因在于没有仔细研究和做笔记 Git修改remote地址 之前一直使用的ssh的地址,估计是没配置好,每次都需要输密码烦死了,今天看到个用ht ...

  10. switch判断注意点

    if判断,如果判断的两个值类型不同,会继续隐性转换,==,当然如果使用===就不会. 1 if(2=="2"){ 2 console.log("true"); ...