当前位置: 澳门新濠3559 > 编程 > 正文

PHP 允许您从脚本直接发送电子邮件,'邮件内容

时间:2019-11-22 20:51来源:编程
",$UserName,$contents);$contents=eregi_replace("",$Password,$contents);$contents=eregi_replace("",$Url,$contents); //发信 $to_email=$email;$from_email="php-java@21cn.com"; $subject="Wellcom!";$header_info="From:$from_emailnReply-To:$from_

",$UserName,$contents); $contents=eregi_replace("",$Password,$contents); $contents=eregi_replace("",$Url,$contents); //发信 $to_email=$email; $from_email="php-java@21cn.com"; $subject="Wellcom!"; $header_info="From:$from_emailnReply-To:$from_email"; $result=@mail($to_email,$subject,$contents,$header_info); if { echo "发信成功!"; } else { echo "发信失利!"; } ?> //wellcom.txt内容; 您的注册资料为: 客商名: 密码: 迎接您的过来! 接待访谈:

if(send_mail('test@qq.com','邮件宗旨','邮件内容')==""){
echo "发送成功!<br>";
} else{
echo "发送退步!<br>";
}

PHP 发送电子邮件


PHP 允许你从剧本直接发送电子邮件。


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

<?php
$to = "test@test.com";
$subject = "Test Subject";
$message = "This is the test email.";
$from = "youremail@yourdomain.com";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
?>

PHP mail() 函数

PHP mail() 函数用于从剧本中发送电子邮件。

语法

mail(to,subject,message,headers,parameters)

 

参数 描述
to 必需。规定 email 接收者。
subject 必需。规定 email 的主题。注释:该参数不能包含任何新行字符。
message 必需。定义要发送的消息。应使用 LF (n) 来分隔各行。每行应该限制在 70 个字符内。
headers 可选。规定附加的标题,比如 From、Cc 和 Bcc。应当使用 CRLF (rn) 分隔附加的标题。
parameters 可选。对邮件发送程序规定额外的参数。

注释:PHP 供给三个已设置且正在运行的邮件系统,以便使邮件函数可用。所用的次第通过在 php.ini 文件中的配置安装开展定义。请在大家的 PHP Mail 仿照效法手册 阅读越来越多内容。


看了须臾间手册,就直接开端写代码了,如下

 <?php
function send_mail($to, $subject = 'No subject', $body) {
$loc_host = "im286"; //发信Computer名,可轻松
$smtp_acc = "test@126.com"; //Smtp认证的客户名
$smtp_pass="******"; //Smtp认证的密码,常常等同pop3密码
$smtp_host="smtp.126.com"; //SMTP服务器地址,相近 smtp.tom.com
$from="test@126.com"; //发信人Email地址,你的投送信箱地址
$headers = "Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64";
$lb=" "; //linebreak

PHP 简易 E-Mail

由此 PHP 发送电子邮件的最简易的秘籍是出殡和下葬生机勃勃封文本 email。

在下边包车型大巴实例中,大家率先表明变量($to, $subject, $message, $from, $headers),然后大家在 mail() 函数中接纳这个变量来发送了风度翩翩封 e-mail:

<?php
$to = "someone@example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "someonelse@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>

 


<?php 

$hdr=explode($lb,$headers); //解析后的hdr
if($body){$bdy = preg_replace("/^./","..",explode($lb,$body));}//深入分析后的Body

PHP Mail 表单

透过 PHP,您能够在团结的站点制作二个报告表单。下面包车型地铁实例向内定的 e-mail 地址发送了一条文本音讯:

<html>
<body>

<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("someone@example.com", $subject,
$message, "From:" . $email);
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text'><br>
Subject: <input name='subject' type='text'><br>
Message:<br>
<textarea name='message' rows='15' cols='40'>
</textarea><br>
<input type='submit'>
</form>";
}
?>

</body>
</html>

实例解释:

  • 率先,检查是还是不是填写了邮件输入框

  • 假诺未填写(举例在页面被第3回访谈时卡塔尔国,输出 HTML 表单

  • 例如已填写(在表单被填写后卡塔尔,从表单发送电子邮件

  • 当填写完表单点击提交开关后,页面重新载入,能够见到邮件输入被重新设置,同一时间展现邮件发送成功的音信

注释:本条大致发送 e-mail 不安全,在本教程的下豆蔻梢头章中,您将阅读到更多关于电子邮件脚本中的安全隐患,大家将为你解说如何评释客户输入使它更安全。

$to = "test@163.com"; //收件人 

$smtp = array(
//1、EHLO,期望回到220照旧250
array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
//2、发送Auth Login,期望回到334
array("AUTH LOGIN".$lb,"334","AUTH error:"),
//3、发送经过Base64编码的客商名,期望回到334
array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
//4、发送经过Base64编码的密码,期望回到235
array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));
//5、发送Mail From,期待回到250
$smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: ");
//6、发送Evoquecpt To。期望回到250
$smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: ");
//7、发送DATA,期望回到354
$smtp[] = array("DATA".$lb,"354","DATA error: ");
//8.0、发送From
$smtp[] = array("From: ".$from.$lb,"","");
//8.2、发送To
$smtp[] = array("To: ".$to.$lb,"","");
//8.1、发送标题
$smtp[] = array("Subject: ".$subject.$lb,"","");
//8.3、发送别的Header内容
foreach($hdr as $h) {$smtp[] = array($h.$lb,"","");}
//8.4、发送三个空行,结束Header发送
$smtp[] = array($lb,"","");
//8.5、发送信件主体
if($bdy) {foreach($bdy as $b) {$smtp[] = array(base64_encode($b.$lb).$lb,"","");}}
//9、发送“.”表示信件甘休,期望回到250
$smtp[] = array(".".$lb,"250","DATA(end)error: ");
//10、发送Quit,退出,期望回到221
$smtp[] = array("QUIT".$lb,"221","QUIT error: ");

$subject = "Test"; //主题 

//展开smtp服务器端口
$fp=@fsockopen($smtp_host, 25);
if(!$fp) echo "<b>Error:</b> Cannot conect to ".$smtp_host."<br>";
while($result = @fgets($fp, 1024)){if(substr($result,3,1) == " ") { break; }}

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

$result_str="";
//发送smtp数组中的命令/数据
foreach($smtp as $req){
//发送音讯
@fputs($fp, $req[0]);
//假若要求选择服务器重临新闻,则
if($req[1]){
//接纳信息
while($result = @fgets($fp, 1024)){
if(substr($result,3,1) == " ") { break; }
};
if (!strstr($req[1],substr($result,0,3))){
$result_str.=$req[2].$result."<br>";
}
}
}
//关闭连接
@fclose($fp);
return $result_str;
}
?>

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('SMTP','smtp.163.com');//发件SMTP服务器 

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

ini_set('sendmail_from',"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邮件如何的不 是非常了然,所以也不知晓那几个结论是不是是准确的卡塔 尔(英语:State of Qatar):使用mail()函数发送邮件就亟需要有黄金时代台不必要SMTP验证就足以发信的邮件服务器。但方今的 SMTP邮件服务器基本上都是索要验证的,所以要想选取它发邮件就只能自个儿在该地搭三个不供给表明的SMTP服务器。那就比较费心了,作者是不想整,风趣味的同室可以团结尝试搭二个,用windows自带的IIS就足以,或然从英特网下载别的的SMTP服务器软件,作者就相当的少说。

结论:选拔mail()函数发送邮件,就一定要有意气风发台无需声明的SMTP服务器。

那样的话配置专门的学业会多或多或少,可是使用的时候就比较简便了,几行代码就能够。

 二、使用封装SMTP公约的邮件类

这种措施就比较宽泛了,极其对于大范围本人不曾服务器,从英特网购买设想主机的同班,

率先种办法不现实,所以依旧要好使用SMTP协议来发送邮件吧。

但是要到位那项工作的话,就须求你对SMTP公约有早晚的问询,喜欢以身作则的同室能够友善入手写多个,喜欢拿来主义的同学就能够从英特网下载了,有那些。

唯独笔者比较推荐使用PEA昂Cora增加中的Mail类,效率强盛:能够支撑纯文本、HTML格式的邮件;各字段都可安装编码,准确配置不会冒出中文乱码情状;能够支撑附属类小构件等等。

在服务器能够运用 pear install Mail 命令火速安装,未有丰盛服务器权限的同窗也得以直接下载类的PHP源码满含进来就足以了。

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

详细安装方式能够在官方网址查阅,。

<?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"] = "username@163.com"; //发件人邮箱 

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

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

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

//$smtpinfo["debug"] = true;//调节和测量检验形式 

// 收件人列表 

$mailAddr = array('receiver@163.com'); 

// 发件人展现音信 

$from = "Name <username@163.com>"; 

// 收件人突显新闻 

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

// 邮件题目 

$subject = "那是后生可畏封测量试验邮件"; 

// 邮件正文 

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

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

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

//换行符号 Linux: n  Windows: rn 

$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类,然后多写几行布置代码,就能够了。何况英特网有广大示范的代码,超多时候假诺复制过来然后改正个别的多少个参数就能够用了,所以会很有益,推荐应用此办法。

编辑:编程 本文来源:PHP 允许您从脚本直接发送电子邮件,'邮件内容

关键词: