尝试使用PHP函数创建时,phpMail不工作

尝试使用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

我正在使用PHPMailer发送电子邮件。但我必须在每一页上写下发送电子邮件的长长代码。所以我想把所有的东西都放到一个函数中,只要我想让事情变得简单、简单和容易,就调用它。但当试图发送电子邮件时,它不起作用。我尝试了以下方法:

functions.php

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文件中。