/*邮件发送类
*功能:php教程 socket 使用smtp服务器发送邮件
*作者:longlong
*时间:2007-11-26
*转帖请加本贴引用地址:showpost.asp教程?threadid=1345
*/
class smtp
{
/* 全局变量 */
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;/* 构造函数 */
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;
}/* 主函数,发送邮件 */
function sendmail($flag, $boundary, $to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
{
$mail_from = $this->get_address($this->strip_comment($from));
$body = ereg_replace("(^|(rn))(.)", "1.3", $body);
$header = "mime-version:1.0rn";
//*
if($mailtype=="html"){
//echo $boundary;exit;
if($flag==2)
{
$header .= "content-type:multipart/mixed; boundary= $boundaryrn";
//$header .= "content-type:text/htmlrn";
}
else
{
$header .= "content-type:text/htmlrn";
}
}
//*/$header .= "to: ".$to."rn";
if ($cc != "") {
$header .= "cc: ".$cc."rn";
}$header .= "from: $from<".$from.">rn";
$header .= "subject: ".$subject."rn";
$header .= $additional_headers;
$header .= "date: ".date("r")."rn";
$header .= "x-mailer:by redhat (php/".phpversion().")rn";//$header.=$body;//edit by shaolong
list($msec, $sec) = explode(" ", microtime());$header .= "message-id: <".date("ymdhis", $sec).".".($msec*1000000).".".$mail_from.">rn";
$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 hostn");
}
return $sent;
}/* 私有函数 */
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 <cr><lf>.<cr><lf> [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."rn".$body);
$this->smtp_debug("> ".str_replace("rn", "n"."> ", $header."n> ".$body."n> "));
return true;
}function smtp_eom()
{
fputs($this->sock, "rn.rn");$this->smtp_debug(". [eom]n");
return $this->smtp_ok();
}function smtp_ok()
{
$response = str_replace("rn", "", fgets($this->sock, 512));
$this->smtp_debug($response."n");if (!ereg("^[23]", $response)) {
fputs($this->sock, "quitrn");
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."rn");
$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("([ trn])+", "", $address);
$address = ereg_replace("^.*<(.+)>.*$", "1", $address);
return $address;
}function smtp_debug($message)
{
if ($this->debug) {
echo $message;
}
}
}
php socket 使用smtp服务器发送邮件
时间: 2024-10-30 16:31:57
php socket 使用smtp服务器发送邮件的相关文章
java使用Socket实现SMTP协议发送邮件_java
本文实例为大家分享了java 利用Socket实现SMTP协议发送邮件的具体代码,供大家参考,具体内容如下 package mail; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; impo
如何在 Linux 上使用 Gmail SMTP 服务器发送邮件通知
如何在 Linux 上使用 Gmail SMTP 服务器发送邮件通知 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm)等等.当你要建立自己的 邮件发送服务器 传递信息时 ,你可以替代使用一个免费的公共 SMTP 服务器,从而避免遭受维护之苦. 谷歌的 Gmail 服务就是最可靠的 免费 SMTP 服务器 之一.想要从应用中发送邮件通知,你仅需在应用中
php mailer类调用远程SMTP服务器发送邮件实现方法_php技巧
本文实例讲述了php mailer类调用远程SMTP服务器发送邮件实现方法.分享给大家供大家参考,具体如下: php mailer 是一款很好用的php电子邮件发送类模块,可以调用本地的smtp发送电子邮件,也可以调用远程的smtp发送电子邮件,但是使用时需要注意一些事项,否则就会造成发送失败,或者根本不能调用的情况,本文就我在使用这个类时,遇到的问题和解决办法进行展开,简要说明一下php mailer的用法,及注意事项. 首先下载phpmailer类库文件,在这里下载,只需一个资源分. 下载地
微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件
原文:微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件 开篇介绍 大多数情况下我们的 SSIS 包都会配置在 SQL Agent Job 中周期性的按计划执行,比如每天晚上调用 SSIS 包刷新数据,处理 Cube 等.一旦 SSIS 包中出现任何异常,报错,那么配置在 SQL Agent Job 中的通知,邮件提醒就会把这些错误信息发邮件到指定的用户或者系统维护者,这样就起到了一个错误监控的作用. 但是在有的情况下,有一些
求高手!关于smtp服务器发送邮件的问题。
问题描述 最近在做网络推广,自己配置的服务器,但是一次只能发送12W条数据,然后发送邮件的Queue就会满了,就会提示发送失败了.这时必须清空Queue文件夹,才能继续发送,我想找一个办法能一直不停的发送(阿拉帮)! 解决方案 解决方案二:那就想个办法定时清空Queue文件夹.解决方案三:楼上说的方法不好用的,我们试过了,smtp服务正在占用那个资源,删除会出现错误的,如果想删除的话必须关闭smtp那样也不是最好的解决办法.有个高手是这样说的,他的意思是Queue队列满了,是邮件发送太慢了导致邮
用Socket发送电子邮件(利用需要验证的SMTP服务器)_php基础
<? * 名称:用Socket发送电子邮件 * 描述:本类实现了直接使用需要验证的SMTP服务器直接发送邮件,参考文章<用Socket发送电子邮件>作者:limodou * 此文章比较早,他是用不用验证SMTP服务器发送邮件,现在基本上SMTP服务器都需要验证了,所以这个文章里的类 意义也不是很大!同时参考了[RFC 1869]和PHP手册!!和上文还有不同的是我用的不是fsockopen()函数 具体你自己看吧!!我刚刚测试通过
telnet登录smtp服务器的问题
问题描述 telnet登录smtp服务器的问题 我在cmd里通过telnet smtp.163.com 25访问163的smtp服务器,在后面如果出错了该怎么处理?比如密码输错的话会提示验证失败,失败之后不管再输入什么都会提示command not implemented,这个时候如果想重新输入该怎么办? 解决方案 使用Telnet登录SMTP服务器发送邮件用python登录公司内部SMTP服务器的代码用telnet发送邮件到smtp服务器的测试 解决方案二: 按control-c,选e(exi
php基于socket实现SMTP发送邮件的方法
这篇文章主要介绍了php基于socket实现SMTP发送邮件的方法,实例分析了php采用socket实现smtp发送邮件的原理与技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php基于socket实现SMTP发送邮件的方法.分享给大家供大家参考.具体分析如下: php采用socket通过SMTP发送邮件. 用的是php的php-sockets扩展,可以发送纯文本和html格式的邮件.代码如下: 代码如下: <?php /** * 邮件发送类 * 支持发送纯文本邮件和H
php基于socket实现SMTP发送邮件的方法_php技巧
本文实例讲述了php基于socket实现SMTP发送邮件的方法.分享给大家供大家参考.具体分析如下: php采用socket通过SMTP发送邮件. 用的是php的php-sockets扩展,可以发送纯文本和html格式的邮件.代码如下: 复制代码 代码如下: <?php /** * 邮件发送类 * 支持发送纯文本邮件和HTML格式的邮件 * @example * $config = array( * "from" => "*****", *