php发送邮件转码(PHP 发邮件)
为什么用PHP发送到邮件的邮件有乱码??求大神帮我解决啊。。解决了加分
你本来设置的编码和你发邮件类的编码不一致吧,你可以尝试改下编码。乱码一般都是编码出问题。。
PHP中发送邮件的代码!
从代码来看,想必楼主是想把表单提交的内容发送至指定邮箱,而这个邮箱地址也是在表单中填写的,$sendTo变量的值被赋为表单项“toMail”传过来的值。
如此,你可以在填写表单的时候在toMail表单项里填入“88888@qq.com”,或者直接$sendTo="88888@qq.com"。
接下来就要考虑是否能发送出去了:
1、如果楼主配置的服务器安装了sendmail组件,就可以直接使用你写的这段代码来完成任务。
2、如果没有安装sendmail组件,就要接用smtp服务器来发送了。这样相对较复杂,要引用一个PHP类。具体代码如下:
SMTP.PHP:
?php
class smtp
{
/* Public Variables */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;
/* Private Variables */
var $sock;
/* Constractor */
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
{
$this-debug = FALSE;
$this-smtp_port = $smtp_port;
$this-relay_host = $relay_host;
$this-time_out = 30; //is used in fsockopen()
#
$this-auth = $auth;//auth
$this-user = $user;
$this-pass = $pass;
#
$this-host_name = "localhost"; //is used in HELO command
$this-log_file = "";
$this-sock = FALSE;
}
/* Main Function */
function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
{
$mail_from = $this-get_address($this-strip_comment($from));
$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
$header = "MIME-Version:1.0\r\n";
if($mailtype=="HTML")
{
$header .= "Content-Type:text/html\r\n";
}
$header .= "To: ".$to."\r\n";
if ($cc != "")
{
$header .= "Cc: ".$cc."\r\n";
}
$header .= "From: $from".$from."\r\n";
$header .= "Subject: ".$subject."\r\n";
$header .= $additional_headers;
$header .= "Date: ".date("r")."\r\n";
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";
list($msec, $sec) = explode(" ", microtime());
$header .= "Message-ID: ".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from."\r\n";
$TO = explode(",", $this-strip_comment($to));
if ($cc != "")
{
$TO = array_merge($TO, explode(",", $this-strip_comment($cc)));
}
if ($bcc != "")
{
$TO = array_merge($TO, explode(",", $this-strip_comment($bcc)));
}
$sent = TRUE;
foreach ($TO as $rcpt_to)
{
$rcpt_to = $this-get_address($rcpt_to);
if (!$this-smtp_sockopen($rcpt_to))
{
$this-log_write("Error: Cannot send email to ".$rcpt_to."\n");
$sent = FALSE;
continue;
}
if ($this-smtp_send($this-host_name, $mail_from, $rcpt_to, $header, $body))
{
$this-log_write("E-mail has been sent to ".$rcpt_to."\n");
}
else
{
$this-log_write("Error: Cannot send email to ".$rcpt_to."\n");
$sent = FALSE;
}
fclose($this-sock);
$this-log_write("Disconnected from remote host\n");
}
return $sent;
}
/* Private Functions */
function smtp_send($helo, $from, $to, $header, $body = "")
{
if (!$this-smtp_putcmd("HELO", $helo))
{
return $this-smtp_error("sending HELO command");
}
#auth
if($this-auth)
{
if (!$this-smtp_putcmd("AUTH LOGIN", base64_encode($this-user)))
{
return $this-smtp_error("sending HELO command");
}
if (!$this-smtp_putcmd("", base64_encode($this-pass)))
{
return $this-smtp_error("sending HELO command");
}
}
#
if (!$this-smtp_putcmd("MAIL", "FROM:".$from.""))
{
return $this-smtp_error("sending MAIL FROM command");
}
if (!$this-smtp_putcmd("RCPT", "TO:".$to.""))
{
return $this-smtp_error("sending RCPT TO command");
}
if (!$this-smtp_putcmd("DATA"))
{
return $this-smtp_error("sending DATA command");
}
if (!$this-smtp_message($header, $body))
{
return $this-smtp_error("sending message");
}
if (!$this-smtp_eom())
{
return $this-smtp_error("sending CRLF.CRLF [EOM]");
}
if (!$this-smtp_putcmd("QUIT"))
{
return $this-smtp_error("sending QUIT command");
}
return TRUE;
}
function smtp_sockopen($address)
{
if ($this-relay_host == "")
{
return $this-smtp_sockopen_mx($address);
}
else
{
return $this-smtp_sockopen_relay();
}
}
function smtp_sockopen_relay()
{
$this-log_write("Trying to ".$this-relay_host.":".$this-smtp_port."\n");
$this-sock = @fsockopen($this-relay_host, $this-smtp_port, $errno, $errstr, $this-time_out);
if (!($this-sock $this-smtp_ok()))
{
$this-log_write("Error: Cannot connenct to relay host ".$this-relay_host."\n");
$this-log_write("Error: ".$errstr." (".$errno.")\n");
return FALSE;
}
$this-log_write("Connected to relay host ".$this-relay_host."\n");
return TRUE;
}
function smtp_sockopen_mx($address)
{
$domain = ereg_replace("^.+@([^@]+)$", "\1", $address);
if (!@getmxrr($domain, $MXHOSTS))
{
$this-log_write("Error: Cannot resolve MX \"".$domain."\"\n");
return FALSE;
}
foreach ($MXHOSTS as $host)
{
$this-log_write("Trying to ".$host.":".$this-smtp_port."\n");
$this-sock = @fsockopen($host, $this-smtp_port, $errno, $errstr, $this-time_out);
if (!($this-sock $this-smtp_ok()))
{
$this-log_write("Warning: Cannot connect to mx host ".$host."\n");
$this-log_write("Error: ".$errstr." (".$errno.")\n");
continue;
}
$this-log_write("Connected to mx host ".$host."\n");
return TRUE;
}
$this-log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");
return FALSE;
}
function smtp_message($header, $body)
{
fputs($this-sock, $header."\r\n".$body);
$this-smtp_debug(" ".str_replace("\r\n", "\n"." ", $header."\n ".$body."\n "));
return TRUE;
}
function smtp_eom()
{
fputs($this-sock, "\r\n.\r\n");
$this-smtp_debug(". [EOM]\n");
return $this-smtp_ok();
}
function smtp_ok()
{
$response = str_replace("\r\n", "", fgets($this-sock, 512));
$this-smtp_debug($response."\n");
if (!ereg("^[23]", $response))
{
fputs($this-sock, "QUIT\r\n");
fgets($this-sock, 512);
$this-log_write("Error: Remote host returned \"".$response."\"\n");
return FALSE;
}
return TRUE;
}
function smtp_putcmd($cmd, $arg = "")
{
if ($arg != "")
{
if($cmd=="")
$cmd = $arg;
else
$cmd = $cmd." ".$arg;
}
fputs($this-sock, $cmd."\r\n");
$this-smtp_debug(" ".$cmd."\n");
return $this-smtp_ok();
}
function smtp_error($string)
{
$this-log_write("Error: Error occurred while ".$string.".\n");
return FALSE;
}
function log_write($message)
{
$this-smtp_debug($message);
if ($this-log_file == "")
{
return TRUE;
}
$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
if (!@file_exists($this-log_file) || !($fp = @fopen($this-log_file, "a")))
{
$this-smtp_debug("Warning: Cannot open log file \"".$this-log_file."\"\n");
return FALSE;
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);
return TRUE;
}
function strip_comment($address)
{
$comment = "\([^()]*\)";
while (ereg($comment, $address))
{
$address = ereg_replace($comment, "", $address);
}
return $address;
}
function get_address($address)
{
$address = ereg_replace("([ \t\r\n])+", "", $address);
$address = ereg_replace("^.*(.+).*$", "\1", $address);
return $address;
}
function smtp_debug($message)
{
if ($this-debug)
{
echo $message;
}
}
}
?
DEMO:TEST.PHP
?php
require "smtp.php";
$smtpserver = "smtp.xxx.com";//SMTP服务器
$smtpserverport =25;//SMTP服务器端口
$smtpusermail = "xxxx@xxx.com";//SMTP服务器的用户邮箱
$smtpemailto = "xxxx@xxx.com";//发送给谁
$smtpuser = "xxxx";//SMTP服务器的用户帐号
$smtppass = "xxxx";//SMTP服务器的用户密码
$mailsubject = "客户反馈意见!";//邮件主题
$mailbody = "h1这是我的一个测试~~~/h1";//邮件内容
$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp-debug = false;//是否显示发送的调试信息
$return = ($smtp-sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype));
echo $return;
?

PHP邮件发送
首先去下载一个phpmailer的压缩包(随便一搜就可以找的到)
然后解压
代码如下:
?php
require("phpmailer/class.phpmailer.php"); //引入文件(把刚才解压的那些文件放到对应的路径就可以了)
$mail = new PHPMailer(); //实例化
$mail-IsSMTP(); // 启用SMTP
$mail-Host="smtp.126.com"; //smtp服务器的名称(这里以126邮箱为例)
$mail-SMTPAuth = true; //启用smtp认证
$mail-Username = "******@126.com"; //你的邮箱名
$mail-Password = "*****"; //邮箱密码
$mail-From = "****@126.com"; //发件人地址(也就是你的邮箱地址)
$mail-FromName = "****"; //发件人姓名
$mail-AddAddress("收件人地址","收件人姓名"); //添加收件人
$mail-AddReplyTo("*****@126.com", "****"); //回复地址(可填可不填)
$mail-WordWrap = 50; //设置每行字符长度
$mail-AddAttachment("images/01.jpg", "manu.jpg"); // 添加附件,并指定名称
$mail-IsHTML(true); // 是否HTML格式邮件
$mail-CharSet="utf-8"; //设置邮件编码
$mail-Subject = "****"; //邮件主题
$mail-Body = "******"; //邮件内容
$mail-AltBody = "This is the body in plain text for non-HTML mail clients"; //邮件正文不支持HTML的备用显示
if(!$mail-Send())
{
echo "Message could not be sent. p";
echo "Mailer Error: " . $mail-ErrorInfo;
exit();
} else {
echo "Message has been sent";
}
?
php如何发送邮件
你好,用这个邮件类,需要在调用时,填写一个smtp服务器和你的用户名密码。
?php
set_time_limit(600);
/*
* 邮件发送类
*/
class smail {
//您的SMTP 服务器供应商,可以是域名或IP地址
var $smtp = "";
//SMTP需要要身份验证设值为 1 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp 服务商联系。
var $check = 1;
//您的email帐号名称
var $username = "";
//您的email密码
var $password = "";
//此email 必需是发信服务器上的email
var $s_from = "";
/*
* 功能:发信初始化设置
* $from 你的发信服务器上的邮箱
* $password 你的邮箱密码
* $smtp 您的SMTP 服务器供应商,可以是域名或IP地址
* $check SMTP需要要身份验证设值为 1 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证
*/
function smail ( $from, $password, $smtp, $check = 1 ) {
if( preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/", $from ) ) {
$this-username = substr( $from, 0, strpos( $from , "@" ) );
$this-password = $password;
$this-smtp = $smtp ? $smtp : $this-smtp;
$this-check = $check;
$this-s_from = $from;
}
}
/*
* 功能:发送邮件
* $to 目标邮箱
* $from 来源邮箱
* $subject 邮件标题
* $message 邮件内容
*/
function send ( $to, $from, $subject, $message ) {
//连接服务器
$fp = fsockopen ( $this-smtp, 25, $errno, $errstr, 60);
if (!$fp ) return "联接服务器失败".__LINE__;
set_socket_blocking($fp, true );
$lastmessage=fgets($fp,512);
if ( substr($lastmessage,0,3) != 220 ) return "错误信息1:$lastmessage".__LINE__;
//HELO
$yourname = "YOURNAME";
if($this-check == "1") $lastact="EHLO ".$yourname."\r\n";
else $lastact="HELO ".$yourname."\r\n";
fputs($fp, $lastact);
$lastmessage == fgets($fp,512);
if (substr($lastmessage,0,3) != 220 ) return "错误信息2:$lastmessage".__LINE__;
while (true) {
$lastmessage = fgets($fp,512);
if ( (substr($lastmessage,3,1) != "-") or (empty($lastmessage)) )
break;
}
//身份验证
if ($this-check=="1") {
//验证开始
$lastact="AUTH LOGIN"."\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 334) return "错误信息3:$lastmessage".__LINE__;
//用户姓名
$lastact=base64_encode($this-username)."\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 334) return "错误信息4:$lastmessage".__LINE__;
//用户密码
$lastact=base64_encode($this-password)."\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != "235") return "错误信息5:$lastmessage".__LINE__;
}
//FROM:
$lastact="MAIL FROM: ". $this-s_from . "\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 250) return "错误信息6:$lastmessage".__LINE__;
//TO:
$lastact="RCPT TO: ". $to ." \r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 250) return "错误信息7:$lastmessage".__LINE__;
//DATA
$lastact="DATA\r\n";
fputs($fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 354) return "错误信息8:$lastmessage".__LINE__;
//处理Subject头
$head="Subject: $subject\r\n";
$message = $head."\r\n".$message;
//处理From头
$head="From: $from\r\n";
$message = $head.$message;
//处理To头
$head="To: $to\r\n";
$message = $head.$message;
//加上结束串
$message .= "\r\n.\r\n";
//发送信息
fputs($fp, $message);
$lastact="QUIT\r\n";
fputs($fp,$lastace);
fclose($fp);
return 0;
}
}
// 发送示例
// 只需要把这部分改成你的信息就行
$sm = new smail( "用户名", "密码", "发件smtp服务器" );
$end = $sm-send( "收件人", "发件人(可以伪造哦)", "标题", "内容" );
if( $end ) echo $end;
else echo "发送成功!$x";
?
如何用php结合phpmailer发送邮件
步骤图解教程demo和
phpmailer代码包下载:
看这个博主的文章,新手也能实现php发送邮件:网页链接