php中发送email

一、使用PHP内置的mail()函数

看了一下手册,就直接开始写代码了,如下

<?php

$to = "[email protected]"; //收件人

$subject = "Test"; //主题

$message = "This is a test mail!"; //正文

mail($to,$subject,$message);

结果就直接报错,如下:

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() inD:/www/Zend/email/email.php on line 10

看来本地需要有SMTP服务器,那就使用别人的试试吧,又改了下代码:

<?php

$to = "[email protected]";//收件人

$subject = "Test";//邮件主题

$message = "This is a test mail!";//邮件正文

ini_set(‘SMTP‘,‘smtp.163.com‘);//发件SMTP服务器

ini_set(‘smtp_port‘,25);//发件SMTP服务器端口

ini_set(‘sendmail_from‘,"[email protected]");//发件人邮箱

mail($to,$subject,$message);

结果还是错误:

Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9

看来是需要验证信息,怎么写验证信息呢?在哪里配置呢?上网找了半天也没找出个所以然,最后看了别人一些技术文章后得出结论(由于对SMTP邮件什么的不 是非常了解,所以也不知道这个结论是否是正确的):使用mail()函数发送邮件就必须要有一台无需SMTP验证就可以发信的邮件服务器。但现在的 SMTP邮件服务器基本上都是需要验证的,所以要想使用它发邮件就只能自己在本地搭一个不需要验证的SMTP服务器。这就比较麻烦了,我是不想整,有兴趣 的同学可以自己试试搭一个,用windows自带的IIS就可以,或者从网上下载其他的SMTP服务器软件,我就不多说。

结论:使用mail()函数发送邮件,就必须要有一台不需要验证的SMTP服务器。

这样的话配置工作会多一点,但是使用的时候就比较省事了,几行代码就可以。

二、使用封装SMTP协议的邮件类

这种方法就比较常见了,尤其对于广大自己没有服务器,从网上购买虚拟主机的同学,

第一种方法不现实,所以还是自己使用SMTP协议来发送邮件吧。

不过要完成这项工作的话,就需要你对SMTP协议有一定的了解,喜欢事必躬亲的同学可以自己动手写一个,喜欢拿来主义的同学就可以从网上下载了,有很多。

不过我比较推荐使用PEAR扩展中的Mail类,功能强大:可以支持纯文本、HTML格式的邮件;各字段都可设置编码,正确配置不会出现中文乱码情况;可以支持附件等等。

在服务器可以使用 pear install Mail 命令快速安装,没有足够服务器权限的同学也可以直接下载类的PHP源码包含进来就可以了。

注:Mail类依赖  Net/SMTP.php  和 Mail/mime.php ,要一块下载,使用时一块包含进来。

详细安装方法可以在官网查看,http://pear.php.net/package/Mail

<?php

// Pear Mail 扩展

require_once(‘Mail.php‘);

require_once(‘Mail/mime.php‘);

require_once(‘Net/SMTP.php‘);

$smtpinfo = array();

$smtpinfo["host"] = "smtp.163.com";//SMTP服务器

$smtpinfo["port"] = "25"; //SMTP服务器端口

$smtpinfo["username"] = "[email protected]"; //发件人邮箱

$smtpinfo["password"] = "password";//发件人邮箱密码

$smtpinfo["timeout"] = 10;//网络超时时间,秒

$smtpinfo["auth"] = true;//登录验证

//$smtpinfo["debug"] = true;//调试模式

// 收件人列表

$mailAddr = array(‘[email protected]‘);

// 发件人显示信息

$from = "Name <[email protected]>";

// 收件人显示信息

$to = implode(‘,‘,$mailAddr);

// 邮件标题

$subject = "这是一封测试邮件";

// 邮件正文

$content = "<h3>随便写点什么</h3>";

// 邮件正文类型,格式和编码

$contentType = "text/html; charset=utf-8";

//换行符号 Linux: \n  Windows: \r\n

$crlf = "\n";

$mime = new Mail_mime($crlf);

$mime->setHTMLBody($content);

$param[‘text_charset‘] = ‘utf-8‘;

$param[‘html_charset‘] = ‘utf-8‘;

$param[‘head_charset‘] = ‘utf-8‘;

$body = $mime->get($param);

$headers = array();

$headers["From"] = $from;

$headers["To"] = $to;

$headers["Subject"] = $subject;

$headers["Content-Type"] = $contentType;

$headers = $mime->headers($headers);

$smtp =& Mail::factory("smtp", $smtpinfo);

$mail = $smtp->send($mailAddr, $headers, $body);

$smtp->disconnect();

if (PEAR::isError($mail)) {

//发送失败

echo ‘Email sending failed: ‘ . $mail->getMessage()."\n";

}

else{

//发送成功

echo "success!\n";

}

如果从网上找的SMTP类都是高度封装的,所以使用起来比上面会更简单,但使用方法都是比较相似的。

结论:这种方式发送邮件无需装任何软件,只需要包含进来一个PHP类,然后多写几行配置代码,就可以了。并且网上有很多示例的代码,很多时候只要复制过来然后修改个别的几个参数就可以用了,所以会很方便,推荐使用此方法。

时间: 2024-08-07 04:28:56

php中发送email的相关文章

爬虫:Scrapy13 - 发送 email

虽然 Python 通过 smtplib 库使得发送 email 变得非常简单,Scrapy 仍然提供了自己的实现.该功能十分易用,同时由于采用了 Twisted 非阻塞式(non-blocking)IO,其避免了对爬虫的非阻塞式 IO 的影响.另外,其也提供了简单的 API 来发送附件.通过一些 settings 设置,可以很简单的进行配置. 简单例子 有两种方法可以创建邮件发送器(mail sender).可以通过标准构造器(constructor)创建: from scrapy.mail

ZendFramework2学习笔记 发送email

ZF2中发送email有2种方式,一是通过系统的邮件程序发送email,二是通过smtp协议使用远程的smtp服务器发送email. 相关的类有: use Zend\Mail\Message;//email消息类 use Zend\Mail\Transport\Sendmail;//通过系统邮件程序的发送类 use Zend\Mail\Transport\Smtp;//通过smtp协议使用远程smtp服务器的发送类 use Zend\Mail\Transport\SmtpOptions;//设置

在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse对象,有了返回的HttpWebResponse实例,可以获取登录过程中返回的会话信息,也可以获取响应流. 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text;

使用PHP发送email进行账号激活或者密码修改操作

使用PHPMailer编写发送邮件 PHPMailer需PHP的socket扩展支持,而PHPMailer链接qq域名邮箱时需要ssl加密方式(qq邮箱最近做了限制,新开域名邮箱不再允许通过smtp协议的25端口的普通链接方式链接,只允许ssl的465或587端口[我的一个域名邮箱内测期开通的域名邮箱目前25端口还是可以链接的,可能是安全策略,限制了新开域名邮箱账户的25端口]),固php还得openssl的支持,可以查看phpinfo 准备工作: 1.PHPMailer类文件 2.有一个邮箱账

【转】在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

http://zhoufoxcn.blog.51cto.com/792419/561934 这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可以进行下一步操作,这就免不了POST请求来登录,在实际过程中发现有些网站登录是HTTPS形式的,在解决过程中遇到了一些小问题,现在跟大家分享. 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpW

IOS发送Email的两种方法

IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. 1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出.下面是使用openURL来发邮件的一个小例子: #pragma mark - 使用系统邮件客户

ASP.NET结合COM组件发送Email

在开发电子邮件发送程序的时候,我们经常需要使用到相应的组件,其实不需要第三方的组件(例如:Jmail)照常可以做到发送Email的功能. 在系统目录(如c:/winnt或c:/windows)的system32子目录中可以找到一个名称为cdosys.dll的文件,我们可以通过ASP.NET调用此COM组件来实现Email的发送.cdosys构建在SMTP协议和NNTP协议之上,并且作为Windows2000 Server的组件被安装,当然我们也可以使用Exchange2000中cdoex.dll

SSIS常用的包—发送Email任务

这种任务可以通过SMTP发送Email.在SQL Server 2000中需要通过MAPI来发送email,这意味着需要在执行package的机器上需要安装Outlook.这里不再需要安装Outlook也能发 送email.发送Email任务的编辑页面如图3-19,SMTPConnection选项用来配置SMTP连接. 图3-19 大多数的配置选择项是见名知意的,MessageSourceType选项用来指定邮件消息是从一个文件中读取还是直接填写在MessageSource选项中.

(转) 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

转自:http://blog.csdn.net/zhoufoxcn/article/details/6404236 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse对象,有了返回的HttpWebResponse实例,可以获取登录过程中返回的会话信息,也可以获取响应流. 代码如下: [c-sharp] view plaincopy us