php 邮件类,php邮件编写一个用php socket 发送邮件的类,简单好用,当用到php程序发送邮件时,
而在163服务器中,可以在rcpt命令中还可以验证163邮箱是否存在,还有很多用处,
我现在暂时还没想到。
记录下,有需要的朋友可以参考下
host = $conf['host'];
$this->port = $conf['port'];
$this->user = $conf['user'];
$this->password = $conf['password'];
$this->rcpt = $rcpt;
$this->to_name = $header['to_name'];
$this->from_name = $header['from_name'];
$this->subject = $header['subject'];
$this->html = $html;
$this->body = base64_encode($body);
} catch (exception $e) {
throw new exception($e->getmessage());
}
}
public function connect() {
$this->connection = @fsockopen($this->host, '25', $errno, $errstr, 10);
if (!$this->connection) {
throw new exception('connect failed!');
}
$greet = $this->callback_code();
}
public function helo() {
if($this->is_connect() &&
$this->send_data('helo ' . $this->host) &&
$this->callback_code() == 250
) {
return true;
} else {
throw new exception($this->get_callback_msg_lastest());
}
}
public function send_data($cmd) {
if (is_resource($this->connection)) {
return @fwrite($this->connection, $cmd.\r\n, strlen($cmd) + 2);
}
}
public function auth(){
if ($this->is_connect() &&
$this->send_data('auth login') && $this->callback_code() == 334 &&
$this->send_data(base64_encode($this->user)) && $this->callback_code() == 334 &&
$this->send_data(base64_encode($this->password)) && $this->callback_code() == 235 ) {
return true;
} else {
throw new exception($this->get_callback_msg_lastest());
}
}
public function mail() {
if ($this->is_connect() &&
$this->send_data(mail from:user>) &&
$this->callback_code() == 250
) {
return true;
} else {
throw new exception($this->get_callback_msg_lastest());
}
}
public function is_connect() {
return is_resource($this->connection);
}
public function callback_code() {
if ($this->is_connect()) {
$msg = fgets($this->connection);
if (!empty($msg)) {
$code = substr($msg, 0, strpos($msg, ' '));
} else {
return '';
}
$this->msg[] = $msg;
return $code;
}
}
public function get_callback_msg_lastest() {
return end($this->msg);
}
public function rcpt($rcpt) {
if ($this->is_connect() &&
$this->send_data(rcpt to:) &&
$this->callback_code() == 250
) {
return true;
} else {
throw new exception($this->get_callback_msg_lastest());
}
}
public function data() {
if ($this->is_connect() &&
$this->send_data('data') &&
$this->callback_code() == 354) {
return true;
} else {
throw new exception($this->get_callback_msg_lastest());
}
}
public function send_mail() {
try {
$this->connect();
$this->helo();
$this->auth();
$this->mail();
if (is_array($this->rcpt)) {
foreach ($this->rcpt as $rcpt) {
$this->rcpt($rcpt);
}
} else {
$this->rcpt($this->rcpt);
}
$this->data();
$header = str_replace(\r\n . '.', \r\n . '..', trim(implode(\r\n, $this->get_header())));
$body = str_replace(\r\n . '.', \r\n . '..', $this->body);
$body = substr($body, 0, 1) == '.' ? '.' . $body : $body;
$this->send_data($header);
$this->send_data('');
$this->send_data($body);
$this->send_data('.');
if ($this->callback_code() != 250) {
throw new exception('send mail falied!');
}
return true;
} catch (exception $e) {
throw new exception($e->getmessage());
}
}
//只能检测同一邮件服务器上email address
public function is_email_exist() {
}
public function get_header() {
$header = array();
$content_type = $this->html ? 'text/html;' : 'text/plain;' ;
$headers [] = 'date: ' . gmdate('d, j m y h:i:s') . ' +0000';
$to_mail = is_array($this->rcpt) ? implode(',', $this->rcpt) : $this->rcpt;
$headers [] = 'to: ' . '=? utf8?b?' . base64_encode($this->to_name) . '?=' . ' ';
$headers [] = 'from: ' . '=?utf8?b?' . base64_encode($this->from_name) . '?=' . ' user . '>';
$headers [] = 'subject: ' . '=?utf8?b?' . base64_encode($this->subject) . '?=';
$headers [] = 'content-type:'.$content_type . ' charset=utf8; format=flowed';
$headers [] = 'content-transfer-encoding: base64';
$headers [] = 'content-disposition: inline';
return $headers;
}
}
/**
* 用函数封装类
*/
function send_mail($conf, $rcpt, $header, $body) {
$mail = new mail($conf, $rcpt, $header, $body);
if ($mail->send_mail()) {
echo 'send email successfully!';
} else {
echo 'falied!';
}
}
$conf = array(
'host' => 'smtp.163.com',
'port' => '25',
'user' => 'z1298703836@163.com',
'password' => 'zeiwei123',
);
$rcpt = array(
'z1298703836@sina.com',
'wei.zen@baisonmail.com'
);
$header = array(
'to_name' => 'willstang',
'from_name' => 'sinawill',
'subject' => 'tst of reo ',
);
$body = '
sfsfsd';
$mail = new mail($conf, $rcpt, $header, $body);
$mail->send_mail();
echo '';
print_r($mail->msg);
熟悉邮件发送的过程,它的stmp协议,
还有一些发送的细节,如:发送的内容分为两部分, 一部分在头部,另一部分是email的正文,
http://www.bkjia.com/phpjc/965030.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/965030.htmltecharticlephp 邮件类,php邮件 编写一个用php socket 发送邮件的类,简单好用,当用到php程序发送邮件时, 而在163服务器中,可以在rcpt命令中还可以验...
