很多站长朋友们都不太清楚php多线程发邮件,今天小编就来给大家整理php多线程发邮件,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 关于多线程发邮件的问题!! 2、 PHP中发送邮件的代码! 3、 php怎么写邮件发送 4、 php 发送邮件 要怎么配置 5、 php如何发送邮件 关于多线程发邮件的问题!!设计这个线程的时候,应该由线程决定要发送哪些,而不是在线程外部生成了Dt再从DT中找要发送的内容。这样就使得你的方法SendAsyncProcess不能做到多次发送。
问题出在,你利用sql获得的数据如果是按你所说只获取了10个,那么该线程执行完毕后就不能再执行了。
这里我感觉你应该设计为下面的样子:
在SendAsyncProcess方法中读取10个待发送的邮件,然后发送,发送完毕后继续循环再获取十个,这样重复执行,每次执行间隔10秒。这样就能够实现的需求了。
public void SendAsync()
{
Thread thSendMail = new Thread(new ParameterizedThreadStart(this.SendAsyncProcess));
thSendMail.Start()
thSendMail.Join();
}
private void SendAsyncProcess()
{
SqlDataport sp = new SqlDataport();
string sql = "select top 10 * from tbl_sendmailList";
DataTable dt == sp.getTableResult(sql);
if(dt==null || dt.Rows.Count==0) return ;
while(dt.Rows.Count>0)
{
MailModel[] mailList = new MailModel[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
MailModel mm = new MailModel();
mm.Body = dt.Rows[i]["body"].ToString();
mm.Subject = dt.Rows[i]["subject"].ToString();
mm.ToEmail = dt.Rows[i]["toemail"].ToString();
mm.IsBodyHtml = true;
mailList[i] = mm;
}
MailMessage m;
SmtpClient objClient = GetSmtpClientInst();
for (int i = 0; i < mailList.Length; i++)
{
m = new MailMessage();
m.Subject = listInfo[i].Subject;
m.SubjectEncoding = Encoding.UTF8;
m.From = new MailAddress(this._fromEmail, this._displayName);
m.To.Add(listInfo[i].ToEmail);
m.Body = listInfo[i].Body;
m.IsBodyHtml = listInfo[i].IsBodyHtml;
m.BodyEncoding = Encoding.UTF8;
objClient.Send(m);
}
dt = = sp.getTableResult(sql);
Thread.Sleep(10000);
}
}
你的代码稍微改了一下,应该可以简单满足你的要求,当然这段代码还有很多可优化的地方,我就不帮你改了,你可以参考原理进行改进。希望能帮助你,:)
Epassion是一群在.NET技术方面有多年经验的年轻人组成的开源组织。我们以技术为核心梦想着开发真正属于中国人自己开发的框架系统。当前我们已经开发出来了对象持久化框架Epassion.Data,该框架是基于微软的ADO.NET的一套对象-关系数据映射的组件。可以让你轻松的进行业务逻辑层建立,而不需要考虑具体的SQL语句,这种开发模式也是当前较为流行的模式。
我们还将推出一系列的web组件,让你的web界面设计更见简单。
我们更希望您能加入我们,我们希望有技术的人给我们好的建议,我们也希望能够帮助那些刚刚入行的人,给您提供一些技术支持。让中国人的技术水平提高的更快。
我们的QQ群是:50792130
我们的网站是:
我们等待您的加入。
PHP中发送邮件的代码!从代码来看,想必楼主是想把表单提交的内容发送至指定邮箱,而这个邮箱地址也是在表单中填写的,$sendTo变量的值被赋为表单项“toMail”传过来的值。
如此,你可以在填写表单的时候在toMail表单项里填入“88888@qq测试数据”,或者直接$sendTo="88888@qq测试数据"。
接下来就要考虑是否能发送出去了:
1、如果楼主配置的服务器安装了sendmail组件,就可以直接使用你写的这段代码来完成任务。
2、如果没有安装sendmail组件,就要接用smtp服务器来发送了。这样相对较复杂,要引用一个PHP类。具体代码如下:
SMTP.PHP:
<?php
class smtp
{
/* Public Variables */
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;
/* Constractor */
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;
}
/* Main Function */
function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
{
$mail_from = $this->get_address($this->strip_comment($from));
$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
$header = "MIME-Version:1.0\r\n";
if($mailtype=="HTML")
{
$header .= "Content-Type:text/html\r\n";
}
$header .= "To: ".$to."\r\n";
if ($cc != "")
{
$header .= "Cc: ".$cc."\r\n";
}
$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 != "")
{
$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 host\n");
}
return $sent;
}
/* Private Functions */
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."\r\n".$body);
$this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));
return TRUE;
}
function smtp_eom()
{
fputs($this->sock, "\r\n.\r\n");
$this->smtp_debug(". [EOM]\n");
return $this->smtp_ok();
}
function smtp_ok()
{
$response = str_replace("\r\n", "", fgets($this->sock, 512));
$this->smtp_debug($response."\n");
if (!ereg("^[23]", $response))
{
fputs($this->sock, "QUIT\r\n");
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."\r\n");
$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("([ \t\r\n])+", "", $address);
$address = ereg_replace("^.*<(.+)>.*$", "\1", $address);
return $address;
}
function smtp_debug($message)
{
if ($this->debug)
{
echo $message;
}
}
}
?>
DEMO:TEST.PHP
<?php
require "smtp.php";
$smtpserver = "smtp.xxx测试数据";//SMTP服务器
$smtpserverport =25;//SMTP服务器端口
$smtpusermail = "xxxx@xxx测试数据";//SMTP服务器的用户邮箱
$smtpemailto = "xxxx@xxx测试数据";//发送给谁
$smtpuser = "xxxx";//SMTP服务器的用户帐号
$smtppass = "xxxx";//SMTP服务器的用户密码
$mailsubject = "客户反馈意见!";//邮件主题
$mailbody = "<h1>这是我的一个测试~~~</h1>";//邮件内容
$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp->debug = false;//是否显示发送的调试信息
$return = ($smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype));
echo $return;
?>
php怎么写邮件发送Outlook Express 设置
(提示:如果8、9、10没有设定,会发不出邮件,只能接收)
以中文版 Outlook Express 6 为例,请按以下步骤,手动配置你的客户端:
1、打开 Outlook Express 后,单击窗口中的“工具”菜单,选择“帐户”;
2、点击“邮件”标签,点击右侧的“添加”按钮,在弹出的菜单中选择“邮件”;
3、弹出的对话框中,根据提示,输入你的“显示名”, 然后点击“下一步”;
4、输入你的电子邮件地址,点击“下一步”
5、输入你邮箱的的 POP 和 SMTP 服务器地址:(一般在你的邮箱页面或帮助中有,以下以126邮箱为例说明)
pop: pop.126测试数据
smtp: smtp.126测试数据
再点击“下一步”;
6、输入你的帐号及密码(此帐号为登录此邮箱时用的帐号,仅输入 @ 前面的部分),再点击“下一步”;
7、单击“完成”按钮保存你的设置;
8、设置 SMTP 服务器身份验证:在“邮件”标签中,双击刚才添加的帐号,弹出此帐号的属性框;
9、请点击“服务器”标签,然后在“发送邮件服务器”处,选中“我的服务器要求身份验证”选项,并点击右边“设置”标签,选中“使用与接收邮件服务器相同的设置”。
10、点击“确定”,然后“关闭”帐户框。
现在你已设置成功,点击主窗口中的“发送接收”按钮即可进行邮件收发。
(提示:如果8、9、10没有设定,会发不出邮件,只能接收)
php 发送邮件 要怎么配置在Windows平台下使用mail函数发送邮件,记录如下
php.ini的设置:
SMTP = localhost
smtp_port = 25
sendmail_from=你的设定值
另外,还需要安装IIS自带的SMTP,在SMTP虚拟服务器上点击右键,在弹出的属性窗口里进行如下设置:
点击访问选项卡,再点击中继,在弹出的窗口出点击添加,然后选单台计算机,添加IP地址为 127.0.0.1。然后一路确定返回。(不进行此项设置,可能会出现:SMTP server response: 550 5.7.1 Unable to relay for jxxycc@qq测试数据。。。的错误)
这样就可以使用mail函数了
<?php
mail("jxxycc@qq测试数据","Test mail function of PHP.","hello world!");
?>
php如何发送邮件<?php
//定义边界线
$boundary = uniqid( "" );
//生成邮件头
$header = "From: $from\nContent-type: multipart/mixed;
boundary=\"$boundary\"\nX-Mailer:PHP\nX-Priority:3";
//获取附件文件的MIME类型
$mimetype = mime_content_type('test.zip')
//获取附件文件的名字
$attach = 'test.zip'
//对附件文件进行编码和切分
$fp = fopen($attach, "r");
$content = fread($fp, filesize($attach));
$content = chunk_split( base64_encode($content) );
//生成邮件主体
$body ="
--$boundary
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit
$message
--$boundary
Content-Type: $mimeType; name=$filename
Content-Disposition: attachment; filename=$filename
Content-Transfer-Encoding: base64
$content
--$boundary--";
//发送邮件
mail( $to, $subject, $body, $header );
?>
关于php多线程发邮件的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php多线程发邮件 php实现发送邮件的详细内容...