本文目录一览:
php mail函数到底怎么配置
楼主用phpmailer吧,我用过,比较简单。下面是摘的一段phpmailer配置,试试看,有什么问题再提问。
第一,需要下载PHPMailer文件包phpmailer.
第二,确认你的服务器系统已经支持socket
,通过phpinfo();查看是否支持sockets(socket 是属于PHP扩展部分),如果显现为“enabled”,那就是支持了。
第三,把文件解压到你的web服务器目录下,调用类就可以了.
首先包含class.phpmailer.php,然后创建对象,设置参数,调用成员函数。具体请见下面的示例代码:
实例1,做成函数方便调用
?php
require("phpmailer/class.phpmailer.php");
function smtp_mail( $sendto_email, $subject, $body, $extra_hdrs, $user_name){
$mail = new PHPMailer();
$mail-IsSMTP(); // send via SMTP
$mail-Host = "200.162.244.66"; // SMTP servers
$mail-SMTPAuth = true; // turn on SMTP authentication
$mail-Username = "yourmail"; // SMTP username 注意:普通邮件认证不需要加 @域名
$mail-Password = "mailPassword"; // SMTP password
$mail-From = "yourmail@yourdomain.com"; // 发件人邮箱
$mail-FromName = "管理员"; // 发件人
$mail-CharSet = "GB2312"; // 这里指定字符集!
$mail-Encoding = "base64";
$mail-AddAddress($sendto_email,"username"); // 收件人邮箱和姓名
$mail-AddReplyTo("yourmail@yourdomain.com","yourdomain.com");
//$mail-WordWrap = 50; // set word wrap 换行字数
//$mail-AddAttachment("/var/tmp/file.tar.gz"); // attachment 附件
//$mail-AddAttachment("/tmp/image.jpg", "new.jpg");
$mail-IsHTML(true); // send as HTML
// 邮件主题
$mail-Subject = $subject;
// 邮件内容
$mail-Body = "
htmlhead
meta http-equiv="Content-Language" content="zh-cn"
meta http-equiv="Content-Type" content="text/html; charset=GB2312"
/head
body
I love php。
/body
/html
";
$mail-AltBody ="text/html";
if(!$mail-Send())
{
echo "邮件发送有误 p";
echo "邮件错误信息: " . $mail-ErrorInfo;
exit;
}
else {
echo "$user_name 邮件发送成功!br /";
}
}
// 参数说明(发送到, 邮件主题, 邮件内容, 附加信息, 用户名)
smtp_mail("yourmail@yourdomain.com", "欢迎使用phpmailer!", "NULL", "yourdomain.com", "username");
?
要注意的内容:
1. 邮件的字符集设置,
$mail-CharSet = "GB2312"; //
这里指定字符集!在这里我只指定为GB2312因为这样Outlook能正常显示邮件主题,我尝试过设为utf-8但在Outlook下显示乱码。
2. 如果是发送html格式的邮件,那么记得也指定meta ... charset=GB2312"
3. 如果你想用它来群发邮件的话,记得修改包含文件函数,如:
require("phpmailer/class.phpmailer.php");
改为
require_once("phpmailer/class.phpmailer.php");
否则的话会产生类的重定义。
如何通过php发送邮件?php的mail函数不能用!
支持mail的服务器 一般都是linux的 国内的好像不多
自己的电脑安装mail服务器不能往外发的 呵呵 可以自己测试用
现在很多管理系统都是用fsocketopen方式连接邮件服务器并发送邮件的 可以使用163 126的邮箱 网上有一些模型的 就像是好多管理系统后台让填入用户名和密码 就能群发一样 如果你不介意的话 给你转发一个以前我自己改过的可以利用fsocketopen方式群发或者单发email的一共三个文件
MailClass.php 》》》》》》
?php
class Smtp
{
var $host; //主机
var $port; //端口 一般为25
var $user; //SMTP认证的帐号
var $pass; //认证密码
var $debug = false; //是否显示和服务器会话信息?
var $conn;
var $result_str; //结果
var $in; //客户机发送的命令
var $from; //收件人收到邮件显示的源信箱
var $email; //真实的地址
var $to; //目标信箱
var $subject; //主题
var $body; //内容
var $error;
var $All;
function Smtp($array)
{
$this-host = $array['host'];
$this-port = $array['port'];
$this-email= $array['trueemail'];
$this-from = $array['from'];
$this-user = base64_encode($array['username']);
$this-pass = base64_encode($array['password']);
$this-debug = $array['debug'];
$this-socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
if($this-socket){
$this-result_str = "创建SOCKET:".socket_strerror(socket_last_error());
$this-debug_show($this-result_str);
}
else
die("初始化失败,请检查您的网络连接和参数");
$this-conn = socket_connect($this-socket,$this-host,$this-port);
if($this-conn){
$this-result_str = "创建SOCKET连接:".socket_strerror(socket_last_error());
$this-debug_show($this-result_str);
}
else
die("初始化失败,请检查您的网络连接和参数");
$this-result_str = "服务器应答:font color=#cc0000".socket_read ($this-socket, 1024)."/font";
$this-debug_show($this-result_str);
}
function debug_show($str)
{
if($this-debug)
{
echo $str."p\r\n";
}
}
function setmail($to,$subject,$body){
$this-to = $to;
$this-subject = $subject;
$this-body = $body;
$All ="Content-type:text/html;charset=gb2312\r\n"; //邮件的编码方式可以根据自己的需要改
$All .= "From:".$this-from."\r\n";
$All .= "To:".$this-to."\r\n";
$All .= "Subject:".$this-subject."\r\n\r\n";
$All .= $this-body;
$this-All = $All;
}
/**
* 发送邮件部分
* 接收邮箱数组
*/
function send($toarray,$subject,$body)
{
//以下是和服务器会话
$this-in = "EHLO HELO\r\n";
$this-docommand();
$this-in = "AUTH LOGIN\r\n";
$this-docommand();
$this-in = $this-user."\r\n";
$this-docommand();
$this-in = $this-pass."\r\n";
$this-docommand();
foreach( $toarray as $to ) {
$this - setmail($to,$subject,$body);
$this-in = "RSET\r\n";
$this-docommand();
$this-in = "MAIL FROM:".$this-email."\r\n";
$this-docommand();
$this-in = "RCPT TO:".$this-to."\r\n";
$this-docommand();
$this-in = "DATA\r\n";
$this-docommand();
$this-in = $this-All."\r\n.\r\n";
$this-docommand();
}
$this-in = "QUIT\r\n";
$this-docommand();
//结束,关闭连接
}
function docommand()
{
socket_write ($this-socket, $this-in, strlen ($this-in));
$this-debug_show("Client Action:".$this-in);
$this-result_str = "Server:font color=#cc0000".socket_read ($this-socket, 1024)."/font";
$this-debug_show($this-result_str);
}
}
?
MailConfig.inc.php 》》》》》》
?php
$mailconfig['host'] = "smtp.126.com"; //主机
$mailconfig['port'] = "25"; //端口 一般为25
$mailconfig['trueemail'] = "mhz1600@126.com"; //真实的地址
$mailconfig['username'] = "mhz1600"; //SMTP认证的帐号
$mailconfig['password'] = "*****"; //改成自己的
$mailconfig['debug'] = false; //是否显示和服务器会话信息?
$mailconfig['from'] = "test@test.com"; //显示给用户的发件人
include_once "MailClass.php";
set_time_limit(180);
?
SendDemo.php 》》》》》》
?php
include_once "MailConfig.inc.php";
//简单的临时码验证 当前时间(到小时)的验证码
//if( empty($_GET['s']) || $_GET['s'] != md5(date('Y-m-d-H',time())) ) {header("http/1.1 404"); die('');}
//发送email
if( isset($_POST['sendmail']) ) {
if( isset($_POST['from']) ) $mailconfig['from'] = $_POST['from'];
$smtp = new Smtp($mailconfig);
$title = $_POST['title'];
//获取post的email正文
if( get_magic_quotes_gpc() ) $message = $_POST['message'];
else $message = addslashes($_POST['message']);
//从email列表/文档中分离出所有的email地址
$pregstr = "@[a-zA-Z0-9\_][0-9a-zA-Z\.\-\_]+\@[0-aA-Za-z\-\_]+\.[0-9a-zA-Z\.\-\_]+@is";
$temp = array();
preg_match_all($pregstr,$_POST['emails'],$temp);
$toarray = $temp[0];
//var_dump($toarray);
$smtp-send($toarray,$title,$message);
die("操作完成!A href=".$_SERVER['PHP_SELF']."?s=".md5(date('Y-m-d-H',time()))."继续发送其他/a a href=# onclick=window.close()关闭/a");
}
else {
if( isset($_POST['emails']) ) {
if( is_array($_POST['emails']) )
$emails = implode("\t",$_POST['emails']);
else
$emails = $_POST['emails'];
}
else $emails = "";
?
html
head
meta http-equiv="Content-Type" content="text/html; charset=gb2312"style type="text/css"
!--
body,td,th {
font-size: 12px;
}
--
/style/head
body
form id="form1" name="form1" method="post" action=""
table width="600" border="1" align="center" cellpadding="3" cellspacing="0" bordercolordark="#FFFFFF" bordercolorlight="#eeeeee"
tr
td width="66"发件人:/td
td width="516"input name="from" type="text" value="?php echo $mailconfig['from']; ?" 可以直接修改mailconfig文件中的email/td
/tr
tr
td邮件标题:/td
tdinput name="title" type="text" value="邮件群发测试标题!" size="60"/td
/tr
tr
td收件人:br/td
tdtextarea name="emails" cols="60" rows="5"?php echo $emails; ?/textarea/td
/tr
tr
td邮件正文:br
【html】/td
tdtextarea name="message" cols="60" rows="10"邮件群发测试!谢谢~!/textarea/td
/tr
tr
td /td
tdinput type="submit" name="sendmail" value=" 发送邮件 " /td
/tr
/table
/form
?
}
?
/body
/html
使用方式 运行senddemo.php就行 确定本地或者服务器开启了fsocketopen支持 在输入框可以多种格式的的输入很多email 程序用正则表达式匹配出所有的email地址 通过服务器循环对话的方式不断的发送邮件 看看那个demo的流程就明白了
【郑重声明:mailclass修改自网上的模型 其他本人原创,版权不究 欢迎分享】
+---------------------广告-------------------------+
那一天:回忆,让生活更美好
独享人生中那个特别的日子,记录从那一天开始的幸福
期待您的加入,欢迎提供宝贵的意见建议
+--------------------------------------------------+
+--------------------补充--------------------+
发送邮件的服务器(smtp)并不是网址 126发送邮件的服务器是 smtp.126.com 网易163的发送邮件服务器是 smtp.163.com 所有邮箱对于这个都有说明的 还有一个就是能够使用这个功能的好象新注册的邮箱不太好用 因为网易在2006年10对邮箱进行过调整 在此之前注册的都没问题 在这之后注册的好像开通一些其他的功能并且使用了一段时间才行的
smtp服务器的链接可以在命令提示行下测试 就是使用上面的命令:
首先 telnet smtp.126.com 25
因为smtp使用的25端口提供服务的 然后就会看到
220 126.com Anti-spam GT for Coremail System (126com[071018])
输入 EHLO HELO
服务器返回
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
输入 AUTH LOGIN
服务器返回
334 dXNlcm5hbWU6
然后再输入通过base64加密的用户名和密码 就能通过命令来和服务器对话 包括发送邮件等功能
具体的如果有兴趣更多命令自己查一下
这个php的程序就是模拟这个功能来实现的
如果你用telnet直接连不上的话 说明服务器是错误的 。。
关于php中的mail函数
发邮件建议使用phpmailer,用自带的函数需要服务器权限和修改php.ini参数不实际。