尝试使用PHP函数创建时,phpMail不工作
我正在使用PHPMailer发送电子邮件。但我必须在每一页上写下发送电子邮件的长长代码。所以我想把所有的东西都放到一个函数中,只要我想让事情变得简单、简单和容易,就调用它。但当试图发送电子邮件时,它不起作用。我尝试了以下方法: functions.php尝试使用PHP函数创建时,phpMail不工作,php,email,phpmailer,Php,Email,Phpmailer,我正在使用PHPMailer发送电子邮件。但我必须在每一页上写下发送电子邮件的长长代码。所以我想把所有的东西都放到一个函数中,只要我想让事情变得简单、简单和容易,就调用它。但当试图发送电子邮件时,它不起作用。我尝试了以下方法: functions.php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'phpmailer/src/Exception.php'; require 'phpm
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$settings = $pdo->prepare("SELECT * FROM settings");
$settings-> execute();
$set = $settings->fetch();
function newMail($name, $email, $sub, $msg, $set) {
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Host = $set['set_smtp_host'];
$mail->Port = $set['set_smtp_port'];
$mail->SMTPSecure = $set['set_smtp_security'];
$mail->IsHTML(true);
$mail->SMTPAuth = true;
$mail->Username = $set['set_smtp_uname'];
$mail->Password = $set['set_smtp_pass'];
$mail->setFrom($set['set_noreply_email'], $set['set_site_name']);
$mail->addAddress($email, $name);
$mail->Subject = $sub;
$mail->Body = $msg;
$mail->Send();
}
现在,我尝试在另一个页面(其中包括functions.php)上通过以下方式调用该函数:
$fname = (!empty($_POST['fname']))?$_POST['fname']:null;
$email = (!empty($_POST['email']))?$_POST['email']:null;
$sub = ''.$title.' - Account Verification Link';
$msg = 'SOME BODY MESSAGE';
if(newMail($fname, $email, $sub, $msg)){
echo alert_success("Registration successful! Please check your email and click on the activation link to activate your account. If you did not receive any email within 5 minutes then <a href='resend.php'>click here</a> to resend it.");
}else{
echo alert_success("Registration successful! But unfortunately, we could not send you a verification email. Please <a href='resend.php'>click here</a> to resend it.");
}
$fname=(!empty($\u POST['fname'])?$\u POST['fname']:null;
$email=(!空($\u POST['email'])?$\u POST['email']:空;
$sub='.$title.'-账户验证链接';
$msg='somebody MESSAGE';
if(newMail($fname,$email,$sub,$msg)){
echo alert_success(“注册成功!请检查您的电子邮件并单击激活链接以激活您的帐户。如果您在5分钟内没有收到任何电子邮件,请重新发送。”);
}否则{
echo alert_success(“注册成功!但很遗憾,我们无法向您发送验证电子邮件。请重新发送。”);
}
这里总是返回else消息。我在这里编错代码了吗?最后修改你的函数newMail:
return $mail->Send();
如果邮件已发送,send方法将返回true,因此函数应返回此值,如果不是:
if(newMail(...)){ }
为什么应用else的情况总是错误的
function newMail($name, $email, $sub, $msg, $set) {
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Host = $set['set_smtp_host'];
$mail->Port = $set['set_smtp_port'];
$mail->SMTPSecure = $set['set_smtp_security'];
$mail->IsHTML(true);
$mail->SMTPAuth = true;
$mail->Username = $set['set_smtp_uname'];
$mail->Password = $set['set_smtp_pass'];
$mail->setFrom($set['set_noreply_email'], $set['set_site_name']);
$mail->addAddress($email, $name);
$mail->Subject = $sub;
$mail->Body = $msg;
return $mail->Send(); // add return here
}
最后通过以下方式修改您的函数newMail:
return $mail->Send();
如果邮件已发送,send方法将返回true,因此函数应返回此值,如果不是:
if(newMail(...)){ }
为什么应用else的情况总是错误的
function newMail($name, $email, $sub, $msg, $set) {
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Host = $set['set_smtp_host'];
$mail->Port = $set['set_smtp_port'];
$mail->SMTPSecure = $set['set_smtp_security'];
$mail->IsHTML(true);
$mail->SMTPAuth = true;
$mail->Username = $set['set_smtp_uname'];
$mail->Password = $set['set_smtp_pass'];
$mail->setFrom($set['set_noreply_email'], $set['set_site_name']);
$mail->addAddress($email, $name);
$mail->Subject = $sub;
$mail->Body = $msg;
return $mail->Send(); // add return here
}
您的函数
newMail()
不返回'true'或'false',它不返回任何内容。此代码在将其放入一个单独的函数之前是否工作?是的,当它单独位于函数外部时它工作。第一个问题是,正如@KIKOSoftware所述,newMail()
函数不返回任何内容。第二个问题是,您在newMail()
函数之外包含了PHPMailer库。@SuperGENScript哦,对不起。执行newMail()
函数时,您没有将$set
变量作为参数发送。您的函数newMail()
不返回'true'或'false',它什么也不返回。此代码在将其置于单独的函数内之前是否工作?是,当其位于函数外时,它工作。第一个问题是,正如@KIKOSoftware所述,newMail()
函数不返回任何内容。第二个问题是,您在newMail()
函数之外包含了PHPMailer库。@SuperGENScript哦,对不起。在执行newMail()
函数时,您没有将$set
变量作为参数发送。在更正之前几秒钟,我将其计算出来。但是谢谢:)我不能把使用PHPMailer
的东西放在函数里面吗?如果放置,则在`检查此处:类定义在命名空间中是全局的,因此无需将use PHPMailer
放在函数中,返回`Parse error:syntax error,unexpected'use'(T_use)。在包含文件中可能需要它。在你更正之前几秒钟,我就把它弄出来了。但是谢谢:)我不能把使用PHPMailer
的东西放在函数里面吗?如果放置,则在`检查此处:类定义在命名空间中是全局的,因此无需将use PHPMailer
放在函数中,返回`Parse error:syntax error,unexpected'use'(T_use)。它可能需要包含在include文件中。