Mailer Error: Language string failed to load

 更新时间:2016年11月25日 17:02  点击:1926

Mailer Error: Language string failed to load: from_failedmailangel123@163.com,

今天在写给会员定时发邮件[phpmailer]时突然出现这种问题,经过仔细发查看发现是用户名与密码不正确造成的.下面为正确实可以发送邮箱的函数.

nclude_once("../pmail/class.phpmailer.php");
smtp_mail();

function smtp_mail () {
$mail    = new PHPMailer(); 
$mail->IsSMTP();                  // send via SMTP 
$mail->Host  = "smtp.163.com";   // SMTP servers 
$mail->SMTPAuth = true;           // turn on SMTP authentication 
$mail->Username = "mailangel123";     // SMTP username     注意:普通邮件认证不需要加 @域名
$mail->Password = "*******";          // SMTP password 
$mail->From  = "mailangel123@163.com";        // 发件人邮箱
$mail->FromName =  "您好,你很久没来这里了";    // 发件人
$mail->CharSet  = "GB2312";              // 这里指定字符集!
$mail->Encoding = "base64";
$mail->AddAddress("mailangel123@163.com","test");    // 收件人邮箱和姓名
$mail->AddReplyTo("mailangel123@163.com","163.com");
$mail->IsHTML(true);    // send as HTML            
$mail->Subject  = '您好,你很久没来这里了!'; // 邮件主题
$mail->Body = "test content";// 邮件内容
$mail->AltBody ="text/html"; 
$mail->Send();
if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";
}

以mailangel改成你们自己的邮箱吧.

phpmailer多邮件发送

require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->From     = "list@mydomain.com";
$mail->FromName = "List manager";
$mail->Host     = "smtp1.site.com;smtp2.site.com";
$mail->Mailer   = "smtp";

@MYSQL_CONNECT("localhost","root","password");
@mysql_select_db("my_company");
$query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";
$result = @MYSQL_QUERY($query);

while ($row = mysql_fetch_array ($result)) {
    // HTML body
    $body  = "Hello <font size="4">" . $row["full_name"] . "</font>, <p>";
    $body .= "<i>Your</i> personal photograph to this message.<p>";
    $body .= "Sincerely, <br>";
    $body .= "PHPMailer List manager";

    // Plain text body (for mail clients that cannot read HTML)
    $text_body  = "Hello " . $row["full_name"] . ", ";
    $text_body .= "Your personal photograph to this message. ";
    $text_body .= "Sincerely, ";
    $text_body .= "PHPMailer List manager";

    $mail->Body    = $body;
    $mail->AltBody = $text_body;
    $mail->AddAddress($row["email"], $row["full_name"]);
    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");

    if(!$mail->Send())
        echo "There has been a mail error sending to " . $row["email"] . "<br>";

    // Clear all addresses and attachments for next loop
    $mail->ClearAddresses();
    $mail->ClearAttachments();
}
   


<?php 
// 请求 PHPmailer类 文件
require_once("class.phpmailer.php"
);  
//发送Email函数
function smtp_mail $sendto_email$subject$body$extra_hdrs$user_name
) { 
$mail = new PHPMailer
();  
$mail->IsSMTP();                                     
// send via SMTP  
$mail->Host "smtp.163.com";                       
// SMTP servers  
$mail->SMTPAuth true;                             
// turn on SMTP authentication  
$mail->Username "cfc4n";                          
// SMTP username     注意:普通邮件认证不需要加 @域名 
$mail->Password "123456";                         
// SMTP password  
$mail->From "cfc4n@163.com";                      
// 发件人邮箱 
$mail->FromName "中国资金管理网";                 
//   发件人 ,比如 中国资金管理网
$mail->CharSet "GB2312";                          
// 这里指定字符集! 
$mail->Encoding "base64"
;  
$mail->AddAddress($sendto_email,$user_name);        
// 收件人邮箱和姓名 
$mail->AddReplyTo("treasurer@treasurer.org.cn","中国资金管理网"
);  
//$mail->WordWrap = 50; // set word wrap  
//$mail->AddAttachment("/var/tmp/file.tar.gz");                                                    // attachment  附件1
//$mail->AddAttachment("/tmp/image.jpg", "new.jpg");                                         //附件2
$mail->IsHTML(true);                               
// send as HTML  
$mail->Subject $subject
;                        
// 邮件内容      可以直接发送html文件
$mail->Body 
= <<<EOT
<html><head> 
<meta http-equiv="Content-Language" c> 
<meta http-equiv="Content-Type" c>
<body>
{$user_name}
你好,欢迎您注册本站用户!
</body>
</html>
EOT;
$mail->AltBody ="text/html"
;  
if(
$mail->Send
())  
        {  
   
info_write("ok.txt","$user_name发送成功"
);
        }  
else { 
   
info_write("falied.txt","$user_name失败,错误信息$mail->ErrorInfo"
);
     } 

// 发送Email函数结束
// 写入发送结果函数
function info_write($filename,$info_log
)
    {
  
$info.= $info_log
;
  
$info.="\r\n"
;
  
$fp fopen ($filename,a
);
  
fwrite($fp,$info
);
  
fclose($fp
);
}
//定时跳转页面 函数  其中 1000是时间,1秒, 您可以自定义
function redirect($url
)
    {
         echo 
"<script>
    function redirect() {
     window.location.replace('$url');
    }
    window.setTimeout('redirect();', 15000);
     </script>"
;
    }
//读取文本 邮件地址  您也可以读 数据库
        
$filename "email.txt"
;
        
$fp fopen($filename,"r"
);
        
$contents fread($fp,filesize($filename
));
        
$num_email=explode("\r\n",$contents
);         
  
$len=count($num_email
);
        
fclose($fp
);
// 参数说明(发送到, 邮件主题, 邮件内容, 附加信息, 用户名)
$i $_GET['action'
];
        
$i
++;  
if (
$i<$len
)
    {
  
$rs=explode("@",$num_email[$i
]);
  
$user_name $rs['0'
];
  echo 
"正在发送第{$i}封({$num_email[$i]})邮件......"
;
        
smtp_mail($num_email[$i], 'Treasury Online周刊第十期'$body'http://www.treasurer.org.cn/'$user_name
);
        
redirect("?action=$i"
);
    }
else {
     echo 
"邮件全部发送完毕"
;
  exit;
      }
?>

  在作者所申请的几个PHP 主页空间中,能够提供mail功能的实在不多,总是调用完mail()函数之后就毫无下文了。但是电子邮件在网上生活中的作用越来越大。想一想网虫上网不收邮件能叫真正的网虫吗?邮件的作用我不想再说了,但是假如主页空间不支持mail()发送那么怎么办呢?我也想过通过socket来实现邮件发送,但无奈对用php 进行socket编程不熟悉,再加上发送邮件要用到SMTP协议,又要读不少的英文了,所以一直也没有去研究过。终于有一天我发现了一篇文章,关于用socket编程发送邮件。我如获至宝般将其拷贝下来,并且将其改造成了一个php 可用的类,供大家使用。原来的文章只是一个简单的例子,而且还有一些错误,在我经过多次的实验、改造终于将其改成了一个直接使用socket,向指定的邮箱发送邮件的类,假如大家和前面关于发送MIME的文章结合起来,就可以实现在不支持mail()函数的网站上发送邮件了。因为发送邮件的过程需要时间,可能与mail()的处理机制还不完全一样,所以速度要慢一些,但是可以解决需要发送邮件功能的燃眉之急,同时你也可以学习用php 进行socket编程。下面就将这个类的实现原理介绍给大家,同时向大家讲解一些关于SMTP的基本知识。
Socket编程介绍

  向大家申明,本人不是一个TCP/IP编程专家,故在此只是讲出了我的一点理解和体会。

  使用fsockopen函数打开一个Internet连接,函数语法格式:

int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);

  参数的意思我想不用讲了,这里由于要使用SMTP协议,所以端口号为25。在打开连接成功后,会返回一
个socket句柄,使用它就可以象使用文件句柄一样的。可使用的操作有fputs(),fgets(),feof(),fclose()
等。

  很简单地介绍就到这里吧。
SMTP的基础

  基于TCP/IP的因特网协议一般的命令格式都是通过请求/ 应答方式实现的,采用的都是文本信息,所以处理起来要轻易一些。SMTP是简单邮件传输协议的简称,它可以实现客户端向服务器发送邮件的功能。所以下面所讲的命令是指客户端向服务器发出请求指令,而响应则是指服务器返回给客户端的信息。

  SMTP分为命令头和信息体两部分。命令头主要完成客户端与服务器的连接,验证等。整个过程由多条命令组成。每个命令发到服务器后,由服务器给出响应信息,一般为3 位数字的响应码和响应文本。不同的服务器返回的响应码是遵守协议的,但是响应正文本则不必。每个命令及响应的最后都有一个回车符,这样使用fputs()和fgets()就可以进行命令与响应的处理了。SMTP的命令及响应信息都是单行的。信息体则是邮件的正文部分,最后的结束行应以单独的"."作为结束行。

  客户端一些常用的SMTP指令为:
HELO hostname: 与服务器打招呼并告知客户端使用的机器名字,可以随便填写
MAIL FROM: sender_id : 告诉服务器发信人的地址
RCPT TO: receiver_id : 告诉服务器收信人的地址
DATA : 下面开始传输信件内容,且最后要以只含有.的非凡行结束
RESET: 取消刚才的指令,从新开始
VERIFY userid: 校验帐号是否存在(此指令为可选指令,服务器可能不支持)
QUIT : 退出连接,结束

  服务器返回的响应信息为(格式为:响应码 空格 解释):
220 服务就绪(在socket连接成功时,会返回此信息)
221 正在处理
250 请求邮件动作正确,完成(HELO,MAIL FROM,RCPT TO,QUIT指令执行成功会返回此信息)
354 开始发送数据,结束以 .(DATA指令执行成功会返回此信息,客户端应发送信息)
500 语法错误,命令不能识别
550 命令不能执行,邮箱无效
552 中断处理:用户超出文件空间

  下面给出一个简单的命令头(这是在打开socket之后做的),是我向stmp.263.net发邮件的测试结果:
HELO limodou
250 smtp.263.net
MAIL FROM: chatme@263.net
250 Ok
RCPT TO: chatme@263.net
250 Ok
DATA
354 End data with .
To: chatme@263.net
From: chatme@263.net
Subject: test
From: chatme@263.net
test
.
QUIT
250 Ok: queued as C46411C5097E0

  这就是一些SMTP的简单知识。相关内容可以查阅RFC。

RFC 821定义了收/发电子邮件的相关指令。
RFC 822则制定了邮件

原代码如下:

set_time_limit(120);
class smtp_mail
{
var $host; //主机
var $port; //端口 一般为25
var $user; //smtp认证的帐号
var $pass; //认证密码
var $debug = false; //是否显示和服务器会话信息?
var $conn;
var $result_str; //结果
var $in; //客户机发送的命令
var $from; //源信箱
var $to; //目标信箱
var $subject; //主题
var $body; //内容
function smtp_mail($host,$port,$user,$pass,$debug=false)
{
$this->host = $host;
$this->port = $port;
$this->user = base64_encode($user);
$this->pass = base64_encode($pass);
$this->debug = $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
{
exit("初始化失败,请检查您的网络连接和参数");
}
$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
{
exit("初始化失败,请检查您的网络连接和参数");
}
$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>rn";
}
}
function send($from,$to,$subject,$body)
{
if($from == "" || $to == "")
{
exit("请输入信箱地址");
}
if($subject == "") $sebject = "无标题";
if($body == "") $body = "无内容";
$this->from = $from;
$this->to = $to;
$this->subject = $subject;
$this->body = $body;

$all = "from:".$this->from."n";
$all .= "to:".$this->to."n";
$all .= "subject:".$this->subject."n";
$all .= $this->body;
/*
如过把$all的内容再加处理,就可以实现发送mime邮件了
不过还需要加很多程序
*/


//以下是和服务器会话
$this->in = "ehlo helorn";
$this->docommand();

$this->in = "auth loginrn";
$this->docommand();

$this->in = $this->user."rn";
$this->docommand();

$this->in = $this->pass."rn";
$this->docommand();

$this->in = "mail from:".$this->from."rn";
$this->docommand();

$this->in = "rcpt to:".$this->to."rn";
$this->docommand();

$this->in = "datarn";
$this->docommand();

$this->in = $all."rn.rn";
$this->docommand();

$this->in = "quitrn";
$this->docommand();

//结束,关闭连接

}
function docommand()
{
socket_write ($this->socket, $this->in, strlen ($this->in));
$this->debug_show("客户机命令:".$this->in);
$this->result_str = "服务器应答:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
$this->debug_show($this->result_str);
}
}
//这个是我做的测试,我用的是smtp.163.com,那你的信箱也必须是163.com的,要不人家不让你发!!
//你用这个类的时候你修改成你自己的信箱就可以了
$smtp = new smtp_mail("smtp.163.com","25","t_design","000000",true);
//如果你需要显示会话信息,请将上面的修改成
//$smtp = new smtp_mail("smtp.163.com","25","你的163.com的帐号","你的密码",true);
$smtp->send("t_design@163.com","t_beijing@yahoo.com.cn","你好","你好");
?>

[!--infotagslink--]

相关文章

  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • mybatis 返回Integer,Double,String等类型的数据操作

    这篇文章主要介绍了mybatis 返回Integer,Double,String等类型的数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-25
  • 浅谈C++中的string 类型占几个字节

    本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
  • C# 中string.split用法详解

    本文给大家分享了C# 中string.split用法的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2020-06-25
  • c#中的常用ToString()方法总结

    很多类都重写了ToString方法, 导致很多类的tostring到底执行了什么,有哪些参数,都不清楚...2020-06-25
  • 解决pycharm下载库时出现Failed to install package的问题

    很多小伙伴遇到pycharm下载库时出现Failed to install package不知道怎么解决,下面小编给大家带来了解决方法,需要的朋友参考下吧...2021-09-04
  • Go中string与[]byte高效互转的方法实例

    string与[]byte经常需要互相转化,普通转化会发生底层数据的复制,下面这篇文章主要给大家介绍了关于Go中string与[]byte高效互转的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下...2021-09-20
  • 在C#的类或结构中重写ToString方法的用法简介

    这篇文章主要介绍了在C#的类或结构中重写ToString方法的用法简介,需要的朋友可以参考下...2020-06-25
  • Javascript实现Array和String互转换的方法

    这篇文章主要介绍了Javascript实现Array和String互转换的方法,涉及JavaScript中toString方法与split方法的使用技巧,需要的朋友可以参考下...2015-12-24
  • C#中enum和string的相互转换

    这篇文章主要介绍了C#中enum和string的相互转换的相关资料,需要的朋友可以参考下...2020-06-25
  • C++ 字符串string和整数int的互相转化操作

    这篇文章主要介绍了C++ 字符串string和整数int的互相转化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
  • C#中Byte[]和String之间转换的方法

    很多朋友不清楚如何在Byte[]和String之间进行转换?下面小编给大家带来了byte与string转换的方法,感兴趣的朋友参考下吧...2020-06-25
  • C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换

    本文主要介绍字符串string和内存流MemoryStream及比特数组byte[]之间相互转换的方法,需要的小伙伴可以参考一下。...2020-06-25
  • C++ string替换指定字符实例代码

    这篇文章主要给大家介绍了关于C++ string替换指定字符的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-04-25
  • phpMailer 发送邮件

    //原创:www.111cn.net 注明:转载说明来处www.111cn.net // 昨天听一网友说用php 里面的mail发邮件发不出去,我想一般都是发不了的,现在大多数据邮件提供商都不准那样了...2016-11-25
  • Mysql中关于Incorrect string value的解决方案

    在对mysql数据库中插入数据的时候,直接插入中文是没有问题的!但是用预编译语句时,用流对数据进行处理总报incorrect string value这个异常。本篇文章教给你解决方法...2021-09-20
  • String.Format大全(C# Java)

    String.format无论是在C#中还是在java中应用都非常广泛,今天小编抽个时间把有关string.format知识总结分享给大家,需要的朋友可以参考下...2020-06-25
  • c#中string的特性介绍及注意事项小结

    这篇文章主要给大家介绍了关于c#中string的特性介绍及注意事项的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25