网上很多教程都是用dedecms自带的邮件库发送邮件,而且是写死要发送的字段内容,今天我们用phpmailer来给站长发送自定义表单提交的数据到指定邮箱上(QQ邮箱,163邮箱都可以),不写死任何东西,有什么字段就提交发送什么字段。 操作之前,我们要先搞定用来发送邮件的那个邮箱,说白了就是要开启SMTP。 QQ篇 登录QQ邮箱-设置-账户,找到POP3/IMAP/SMTP,开启,现在的邮箱开启POP3/SMTP都要授权码了,千万要记下你的授权码啊,等一下是作为密码使用的。 开启 […]
网上很多教程都是用dedecms自带的邮件库发送邮件,而且是写死要发送的字段内容,今天我们用phpmailer来给站长发送自定义表单提交的数据到指定邮箱上(QQ邮箱,163邮箱都可以),不写死任何东西,有什么字段就提交发送什么字段。
操作之前,我们要先搞定用来发送邮件的那个邮箱,说白了就是要开启SMTP。
QQ篇
登录QQ邮箱-设置-账户,找到POP3/IMAP/SMTP,开启,现在的邮箱开启POP3/SMTP都要授权码了,千万要记下你的授权码啊,等一下是作为密码使用的。

开启成功后是这样的

163邮箱篇
163邮箱开启POP3/IMAP/SMTP 也是要授权码的,他是自定义的,不能跟邮箱的密码一样,所以千万要记得自己设置的授权码,一会用到它

这里提示也是要开启授权码的



根据自己邮箱开启POP3/IMAP/SMTP,接下来我们来设置后台,认真看下图红色圈着的,一个都不能少

dedecms织梦后台系统配置里添加收件人
变量名称:cfg_shoujianren
变量类型:文本
参数说明:收件人
变量值:你的邮箱@qq.com
所属组:站点设置

下载百度网盘链接: https://pan.baidu.com/s/10mfmS1ZW42nClnLAvNctTg 提取码: c9w2
下载,解压,把里面的4个文件放进/plus/文件夹下
最后一步 添加邮件发送
打开 /plus/diy.php 找到
$id = $dsql->GetLastID();
在它的前面一行加入
$emailbody = '';
foreach($diy->getFieldList() as $field=>$fieldvalue)
{
$emailbody .= $fieldvalue[0].':'.${$field}.'<br />';
}
global $cfg_smtp_server, $cfg_adminemail, $cfg_smtp_port, $cfg_smtp_usermail, $cfg_smtp_password, $cfg_webname, $cfg_basehost, $cfg_smtp_user;
require_once("class.phpmailer.php");
require_once("class.smtp.php");
$mail = new PHPMailer();
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->SMTPAuth=true;
$mail->Host = $cfg_smtp_server;
$mail->SMTPSecure = 'ssl';
$mail->Port = $cfg_smtp_port;
$mail->Hostname = $cfg_basehost;
$mail->CharSet = 'UTF-8';
$mail->FromName = $cfg_smtp_user;
$mail->Username = $cfg_smtp_usermail;
$mail->Password = $cfg_smtp_password;
$mail->From = $cfg_smtp_usermail;
$mail->isHTML(true);
$mail->addAddress($cfg_shoujianren,$cfg_smtp_user);
$mail->Subject = $diy->name;
$mail->Body = $emailbody;
if(!$mail->send())
{
echo "Fail to send. <p>";
echo "Cause of the error: " . $mail->ErrorInfo;
exit;
}
|
PHPMailer需PHP的socket扩展支持,而PHPMailer链接qq域名邮箱时需要ssl加密方式,固php还得openssl的支持,可以查看phpinfo,如下两项均存在则可以使用,其中openssl版本号之类不用管;许多虚拟主机中的
php是不支持openssl扩展的,那你可能就悲剧了。如果你是用官方程序的发送邮件函数,那你的主机要开启fsockopen pfsockopen
检查是否开启echo(function_exists("fsockopen"));输出1,就是开启了,0就是没开启。
出于安性考虑,空间商通常会将fsockopen pfsockopen函数禁用,以防黑客入侵但是关闭fsockopen pfsockopen函数sendmail发邮件不成功怎么办?
我们可以用其他函数代替,如stream_socket_client()。
具体操作方法:
搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。
示例如下:
修改前:
$fp = fsockopen($host, 80, $errno, $errstr, 30);
或
$fp = fsock
修改后:
$fp = stream_socket_client('tcp://'.$host.'80', $errno, $errstr, 30);
或
$fp = stream_socket_client('tcp://'.$host.':'.$port, $errno, $errstr, $connection_timeout);
这样邮件就可以正常发送了!
检查php里socket和openssl扩展是否没开启可以在网站根目录新建个php.php 文件,里面写上
<?php
phpinfo();
浏览器中打开这个文件 http://域名/php.php
查看页面中是否有
