PHP SOCKET 方式傳送郵件 附php類

2021-08-30 11:48:00 字數 4219 閱讀 5927

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

這裡由於要使用

smtp

協議,所以埠號為

25。在開啟連線成功後,會返回一 個

socket

控制代碼,使用它就可以象使用檔案控制代碼一樣的。可使用的操作有

fputs()

, fgets()

,feof()

,fclose()

220

服務就緒(在

socket

連線成功時,會返回此資訊

) 221

正在處理

250

請求郵件動作正確,

354

開始傳送資料,結束以

. 500

語法錯誤,命令不能識別

550

命令不能執行,郵箱無效

552

中斷處理:使用者超出檔案空間

郵箱呼叫類:

<?

class smtp

/* main function */

function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")

$header .= "to: ".$to."\r\n";

if ($cc != "")

$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 != "")

if ($bcc != "")

$sent = true;

foreach ($to as $rcpt_to)

if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) else

fclose($this->sock);

$this->log_write("disconnected from remote host\n");

}echo "

";echo $header;

return $sent;

}/* private functions */

function smtp_send($helo, $from, $to, $header, $body = "")

#auth

if($this->auth)

if (!$this->smtp_putcmd("", base64_encode($this->pass))) }#

if (!$this->smtp_putcmd("mail", "from:<".$from.">"))

if (!$this->smtp_putcmd("rcpt", "to:<".$to.">"))

if (!$this->smtp_putcmd("data"))

if (!$this->smtp_message($header, $body))

if (!$this->smtp_eom())

if (!$this->smtp_putcmd("quit"))

return true;

}function smtp_sockopen($address)

else

}function smtp_sockopen_relay()

$this->log_write("connected to relay host ".$this->relay_host."\n");

return true;;

}function smtp_sockopen_mx($address)

foreach ($mxhosts as $host)

$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)

function smtp_eom()

function smtp_ok()

return true;

}function smtp_putcmd($cmd, $arg = "")

fputs($this->sock, $cmd."\r\n");

$this->smtp_debug("> ".$cmd."\n");

return $this->smtp_ok();

}function smtp_error($string)

function log_write($message)

$message = date("m d h:i:s ").get_current_user()."[".getmypid()."]: ".$message;

if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a")))

flock($fp, lock_ex);

fputs($fp, $message);

fclose($fp);

return true;

}function strip_comment($address)

return $address;

}function get_address($address)

function smtp_debug($message)

}function get_attach_type($image_tag)

return $filedata;}}

?>

呼叫:

<?

require_once ('郵件類');

//##########################################

$smtpserver = "smtp.163.com";//smtp伺服器

$smtpserverport =25;//smtp伺服器端口

$smtpusermail = "";//smtp伺服器的使用者郵箱

$smtpemailto = "";//傳送給誰

$smtpuser = "";//smtp伺服器的使用者帳號

$smtppass = "";//smtp伺服器的使用者密碼

$mailsubject = " 測試郵件系統";//郵件主題

$mailbody = "";//郵件內容

$mailtype = "html";//郵件格式(html/txt),txt為文字郵件

##########################################

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//這裡面的乙個true是表示使用身份驗證,否則不使用身份驗證.

$smtp->debug = false;//是否顯示傳送的除錯資訊

$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);

?>

PHP SOCKET方式傳送郵件

1.php中傳送郵件的方式 php傳送郵件是非常簡單的,因為它提供了mail 函式直接傳送,但這也繼承register globals成為了對初學者的第二大殺手。通過mail 函式傳送郵件需要配置php.ini郵件資訊和需要類似sendmail這樣的組建支援。通過socket通訊,使用smtp傳輸。...

asp Jmail郵件傳送方式

set jmail server.createobject jmail.message 建立傳送郵件的物件 response.write sendfrom sendto tpserver sendusername sendpassword subject message sendname jmail...

python傳送郵件(加密方式傳送)

import smtplib from email.mime.text import mimetext from email.header import header mail server smtp.qq.com port 465 sender qq.com 發件人 password a a 發件...