찾다
php教程PHP源码使用PHP发送邮件的两种方法

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

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

<?php
    $to = "test@163.com"; //收件人  
    $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 = "test@163.com";//收件人  
    $subject = "Test";//邮件主题  
    $message = "This is a test mail!";//邮件正文  
    ini_set(&#39;SMTP&#39;,&#39;smtp.163.com&#39;);//发件SMTP服务器  
    ini_set(&#39;smtp_port&#39;,25);//发件SMTP服务器端口  
    ini_set(&#39;sendmail_from&#39;,"admin@163.com");//发件人邮箱  
    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

下面我举例说明一下在Mail类发送邮件的方法吧,网上其他SMTP邮件类使用方法一块也类似,可以参考:

<?php    
// Pear Mail 扩展  
require_once(&#39;Mail.php&#39;);  
require_once(&#39;Mail/mime.php&#39;);  
require_once(&#39;Net/SMTP.php&#39;);   
$smtpinfo = array();  
$smtpinfo["host"] = "smtp.163.com";//SMTP服务器  
$smtpinfo["port"] = "25"; //SMTP服务器端口  
$smtpinfo["username"] = "username@163.com"; //发件人邮箱
$smtpinfo["password"] = "password";//发件人邮箱密码  
$smtpinfo["timeout"] = 10;//网络超时时间,秒 
$smtpinfo["auth"] = true;//登录验证
//$smtpinfo["debug"] = true;//调试模式
// 收件人列表  
$mailAddr = array(&#39;receiver@163.com&#39;);    
// 发件人显示信息  
$from = "Name <username@163.com>";   
// 收件人显示信息  
$to = implode(&#39;,&#39;,$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[&#39;text_charset&#39;] = &#39;utf-8&#39;;  
$param[&#39;html_charset&#39;] = &#39;utf-8&#39;;  
$param[&#39;head_charset&#39;] = &#39;utf-8&#39;;  
$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 &#39;Email sending failed: &#39; . $mail->getMessage()."\n";  
}  
else{  
    //发送成功  
    echo "success!\n";  
}  
?>

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


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전