PHP SOCKET方式傳送郵件

2021-07-02 07:51:26 字數 4549 閱讀 3306

1.php中傳送郵件的方式 

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

2.mail函式的使用

如果郵件被成功接收,則返回true,否則返回false

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

to 必須。規定郵件的接收者。

subject 必須。規定郵件的主題。改引數不能包含任何換行字元

message 必須。規定要傳送的訊息

headers 可選。規定額外的報頭,不如from.cc以及bcc

parameters 可選。規定sendmail程式的額外引數

3.socket方式傳送原理

使用fsockopen函式開啟乙個internet連線

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中斷處理:使用者超出檔案空間

sendmail.php

<?

require_once ('email.class.php');

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

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

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

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

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

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

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

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

$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.ini檔案引用的'email.class.php'類檔案已經被寫好。直接用就可以了。。

email.class.php

<?

class smtp

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;

}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;}}

?>

PHP SOCKET 方式傳送郵件 附php類

fsockopen string hostname,int port,int errno string errstr int timeout 這裡由於要使用 smtp 協議,所以埠號為 25。在開啟連線成功後,會返回一 個 socket 控制代碼,使用它就可以象使用檔案控制代碼一樣的。可使用的操作有...

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 發件...