参见 php 手册的 mail 函数,里面有例子。当然更复杂的邮件(HTML+附件等等)要你自己去写 mime 信息头,并编码,网上可以搜索到。
写一个发邮件的程序,然后在需要的地方调用这个php、传递必须的参数即可。
如果是定时自动发,我是用 perl 写一个类似的发邮件程序(也可以用 php 写的),然后 cron 定时调用这个程序。
写一个发邮件的程序,然后在需要的地方调用这个php、传递必须的参数即可。
如果是定时自动发,我是用 perl 写一个类似的发邮件程序(也可以用 php 写的),然后 cron 定时调用这个程序。
解决方案 »
- php的filesize函数为何出错Warning: filesize() [function.filesize]: stat failed for 文件路径
- 关于mail函数发送多个email的问题
- 搜索时,出现搜索进度条
- 我刚才写的一个表与表之间数据转移类,用来做不同数据库、不同表、不同字段的数据转移。欢迎讨论交流!
- 时间格式检查函数的问题
- 一个数据表现模式,建表时的相关问题
- 关于Session,怎么取同为一个name的所有存在Session值?
- [求助]关于smartIPB的密码问题
- 为什么不能够正确的接收到chebox的值?
- \x01-\x7f代表什么
- 请问如何在windows下配置PHP运行环境啊?
- 急求PHP在线编辑器
你本机装了邮件服务器么?它在你本机找不到smtp服务器,所以报错。试试看在php.ini中相关地方设置一个有效的smtp服务器地址给它。
看看 php 手册吧,我对 php 在 windows 下配置不熟。
代码如下,你可以用你们公司的服务器。//定义发送邮件参数
$params['username'] = ""; //帐号用户名
$params['password'] = ""; //帐号密码
$params['host'] = ""; //邮件服务器
$params['auth'] = false;//发送邮箱
$main_from = '[email protected]';$email="[email protected]"
$mail_object =& Mail::factory('smtp', $params);
$headers['From'] = $main_from;
$headers['To'] = $CompanyInfo["Company_email"];
$headers['Subject'] = '注册成功信';
$str_email = ""; //邮件内容
$mail_object->send($email, $headers, $str_email);
/***************************************
** Filename.......: class.smtp.inc
** Project........: SMTP Class
** Version........: 1.00b
** Last Modified..: 30 September 2001
***************************************/ define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE);
define('SMTP_STATUS_CONNECTED', 2, TRUE); class smtp{ var $connection;
var $recipients;
var $headers;
var $timeout;
var $errors;
var $status;
var $body;
var $from;
var $host;
var $port;
var $helo;
var $auth;
var $user;
var $pass; /***************************************
** Constructor function. Arguments:
** $params - An assoc array of parameters:
**
** host - The hostname of the smtp server Default: localhost
** port - The port the smtp server runs on Default: 25
** helo - What to send as the HELO command Default: localhost
** (typically the hostname of the
** machine this script runs on)
** auth - Whether to use basic authentication Default: FALSE
** user - Username for authentication Default: <blank>
** pass - Password for authentication Default: <blank>
** timeout - The timeout in seconds for the call Default: 5
** to fsockopen()
***************************************/ function smtp($params = array()){ if(!defined('CRLF'))
define('CRLF', "\r\n", TRUE);
$this->timeout = 5;
$this->status = SMTP_STATUS_NOT_CONNECTED;
$this->host = 'localhost';
$this->port = 25;
$this->helo = 'localhost';
$this->auth = FALSE;
$this->user = '';
$this->pass = '';
$this->errors = array(); foreach($params as $key => $value){
$this->$key = $value;
}
} /***************************************
** Connect function. This will, when called
** statically, create a new smtp object,
** call the connect function (ie this function)
** and return it. When not called statically,
** it will connect to the server and send
** the HELO command.
***************************************/ function connect($params = array()){ if(!isset($this->status)){
$obj = new smtp($params);
if($obj->connect()){
$obj->status = SMTP_STATUS_CONNECTED;
} return $obj; }else{
$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
socket_set_timeout($this->connection, 0, 250000); $greeting = $this->get_data();
if(is_resource($this->connection)){
return $this->auth ? $this->ehlo() : $this->helo();
}else{
$this->errors[] = 'Failed to connect to server: '.$errstr;
return FALSE;
}
}
}
** Function which handles sending the mail.
** Arguments:
** $params - Optional assoc array of parameters.
** Can contain:
** recipients - Indexed array of recipients
** from - The from address. (used in MAIL FROM:),
** this will be the return path
** headers - Indexed array of headers, one header per array entry
** body - The body of the email
** It can also contain any of the parameters from the connect()
** function
***************************************/ function send($params = array()){ foreach($params as $key => $value){
$this->set($key, $value);
} if($this->is_connected()){ // Do we auth or not? Note the distinction between the auth variable and auth() function
if($this->auth){
if(!$this->auth())
return FALSE;
} $this->mail($this->from);
if(is_array($this->recipients))
foreach($this->recipients as $value)
$this->rcpt($value);
else
$this->rcpt($this->recipients); if(!$this->data())
return FALSE; // Transparency
$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers)));
$body = str_replace(CRLF.'.', CRLF.'..', $this->body);
$body = $body[0] == '.' ? '.'.$body : $body; $this->send_data($headers);
$this->send_data('');
$this->send_data($body);
$this->send_data('.'); return (substr(trim($this->get_data()), 0, 3) === '250');
}else{
$this->errors[] = 'Not connected!';
return FALSE;
}
}
/***************************************
** Function to implement HELO cmd
***************************************/ function helo(){
if(is_resource($this->connection)
AND $this->send_data('HELO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){ return TRUE; }else{
$this->errors[] = 'HELO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/***************************************
** Function to implement EHLO cmd
***************************************/ function ehlo(){
if(is_resource($this->connection)
AND $this->send_data('EHLO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){ return TRUE; }else{
$this->errors[] = 'EHLO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/***************************************
** Function to implement AUTH cmd
***************************************/ function auth(){
if(is_resource($this->connection)
AND $this->send_data('AUTH LOGIN')
AND substr(trim($error = $this->get_data()), 0, 3) === '334'
AND $this->send_data(base64_encode($this->user)) // Send username
AND substr(trim($error = $this->get_data()),0,3) === '334'
AND $this->send_data(base64_encode($this->pass)) // Send password
AND substr(trim($error = $this->get_data()),0,3) === '235' ){ return TRUE; }else{
$this->errors[] = 'AUTH command failed: ' . trim(substr(trim($error),3));
return FALSE;
}
} /***************************************
** Function that handles the MAIL FROM: cmd
***************************************/
function mail($from){ if($this->is_connected()
AND $this->send_data('MAIL FROM:<'.$from.'>')
AND substr(trim($this->get_data()), 0, 2) === '250' ){ return TRUE; }else
return FALSE;
} /***************************************
** Function that handles the RCPT TO: cmd
***************************************/
function rcpt($to){ if($this->is_connected()
AND $this->send_data('RCPT TO:<'.$to.'>')
AND substr(trim($error = $this->get_data()), 0, 2) === '25' ){ return TRUE; }else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
} /***************************************
** Function that sends the DATA cmd
***************************************/ function data(){ if($this->is_connected()
AND $this->send_data('DATA')
AND substr(trim($error = $this->get_data()), 0, 3) === '354' ){
return TRUE; }else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
} /***************************************
** Function to determine if this object
** is connected to the server or not.
***************************************/ function is_connected(){ return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));
} /***************************************
** Function to send a bit of data
***************************************/ function send_data($data){ if(is_resource($this->connection)){
return fwrite($this->connection, $data.CRLF, strlen($data)+2);
}else
return FALSE;
} /***************************************
** Function to get data.
***************************************/ function &get_data(){ $return = '';
$line = ''; if(is_resource($this->connection)){
while(strpos($return, CRLF) === FALSE OR substr($line,3,1) !== ' '){
$line = fgets($this->connection, 512);
$return .= $line;
}
return $return; }else
return FALSE;
} /***************************************
** Sets a variable
***************************************/
function set($var, $value){ $this->$var = $value;
return TRUE;
} } // End of class
?>
/***************************************
** Filename.......: test.php
** Project........: SMTP Class
** Last Modified..: 30 September 2001
***************************************/ /***************************************
** Include the class. The header() makes
** the output look lovely.
***************************************/
include('class.smtp.inc');
header('Content-Type: text/plain'); /***************************************
** Setup some parameters which will be
** passed to the smtp::connect() call.
***************************************/
$params['host'] = 'smtp.sohu.com'; // The smtp server host/ip
$params['port'] = 25; // The smtp server port
$params['helo'] = exec('hostname'); // What to use when sending the helo command. Typically, your domain/hostname
$params['auth'] = TRUE; // Whether to use basic authentication or not
$params['user'] = 'phw82'; // Username for authentication
$params['pass'] = 'xxxxxxxxx'; // Password for authentication /***************************************
** These parameters get passed to the
** smtp->send() call.
***************************************/ $send_params['recipients'] = array('[email protected]'); // The recipients (can be multiple)
$send_params['headers'] = array(
'From: "潘"<[email protected]>', // Headers
'To: [email protected]',
'Subject: Test email'
);
$send_params['from'] = '[email protected]'; // This is used as in the MAIL FROM: cmd
// It should end up as the Return-Path: header
$send_params['body'] = '.Test email.'; // The body of the email
/***************************************
** The code that creates the object and
** sends the email.
***************************************/
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD><BODY>
<?
if(is_object($smtp = smtp::connect($params)) AND $smtp->send($send_params)){
echo 'Email sent successfully!'."\r\n\r\n"; // Any recipients that failed (relaying denied for example) will be logged in the errors variable.
print_r($smtp->errors); }else{
echo 'Error sending mail'."\r\n\r\n";
// The reason for failure should be in the errors variable
print_r($smtp->errors);
}?>
</BODY>
</HTML>