Adobe Muse 表单不发送电子邮件



我正在我的缪斯创建的网站上使用联系表单小部件。 电子邮件未发送,我收到以下错误消息:

"Web 服务器中缺少表单 PHP 脚本,或者未配置 PHP 在您的网络托管服务提供商上正确。检查表单是否为 PHP 脚本 已正确上传,请联系您的托管服务提供商了解 PHP配置">

我还负责服务器和使用 AWS EC2 实例 (Amazon Linux AMI(。

当我运行form_check.php脚本时,我在 以下三个检查中的前两个。 第三张支票是红色的 渡。

PHP版本还行

邮件配置:php 邮件未检测到已知问题 配置。

垃圾邮件控制:表单可能会成功发送电子邮件,但会限制垃圾邮件 按 IP 地址提交将不起作用。

不确定这是问题还是其他问题。

编辑#1

好的,所以第三个检查项不是绿色的原因是服务器上没有安装 MYSQL。 安装MYSQL后,所有三个都选中绿色,但是电子邮件仍未发送。

我通过使用PHPMailer让它工作。

首先转到 https://github.com/PHPMailer/PHPMailer 并获取依赖项。 我刚刚下载了zip,并在我的/var/www/html文件夹中安装了PHPMailer-master Directory。

唯一需要的其他事情是修改form_process.php文件。

在那个文件中,我做了两件事。 首先是添加 PHP 的 require 语句,该语句显示在上面链接的 PHPMailer 页面上。 重要的是,您必须在顶部执行此操作,而不是在任何函数中执行此操作:

use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require '../PHPMailer-master/src/Exception.php';
require '../PHPMailer-master/src/PHPMailer.php';
require '../PHPMailer-master/src/SMTP.php';

接下来是更改以下功能。 这假定用户名和密码存储在名为 access 的 ini 文件中.ini该文件位于/var/www 文件夹中。 当然,你可以用任何你喜欢的方式来混淆你的秘密。 我故意为那些可能需要额外功能的人留下注释掉的行。 只是不要取消注释 $mail->SMTPDebug = 2;

function email_form_submission($form) {
$configuration = parse_ini_file('../../access.ini');
$emailPassword = trim ($configuration["emailPassword"]);
$username = trim ($configuration["username"]);
if(!defined('PHP_EOL'))
define('PHP_EOL', 'rn');
$form_email = ((array_key_exists('Email', $_REQUEST) && !empty($_REQUEST['Email'])) ? cleanup_email($_REQUEST['Email']) : '');
$to = $form['email']['to'];
$subject = $form['subject'];
$message = get_email_body($subject, $form['heading'], $form['fields'], $form['resources']);
$headers = get_email_headers($to, $form_email); 
// $sent = @mail($to, $subject, $message, $headers);

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
//Server settings
//$mail->SMTPDebug = 2;                                 // Enable verbose debug output
$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';                       // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = $username;                          // SMTP username
$mail->Password = $emailPassword;                          // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to
//Recipients
$mail->setFrom('info@example.com', 'Mailer');
$mail->addAddress('john@example.com', 'User');     // Add a recipient
//$mail->addAddress('ellen@example.com');               // Name is optional
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
//Attachments
//$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
//Content
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = $subject;
$mail->Body    = $message;
//$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$sent = $mail->send();
if(!$sent)
die(get_form_error_response($form['resources']['failed_to_send_email']));
$success_data = array(
'redirect' => $form['success_redirect']
);
} catch (Exception $e) {
die(get_form_error_response($form['resources']['failed_to_send_email']));
}
echo get_form_response(true, $success_data);
}

需要注意的重要一点是,如果您不注释掉$mail->SMTPDebug = 2;您的邮件将发送,但您将收到服务器错误消息,而不是看到邮件已成功发送。

此外,我对要发送到的电子邮件进行了硬编码,因为它不会改变,但如果您想依靠 Muse 来做到这一点,您可以使用 $to 变量。

所以回顾一下,确保你的服务器上安装了灯栈(Linux/Apache/PHP/MYSQL(。 无需更改任何配置或 ini 文件。
其次,从 PHPMailer 下载 zip 并复制到您的服务器。
第三,修改上述form_process.php中的功能

这对我有用,我的电子邮件发送正确。

我遇到的一个遗留问题非常特定于我的使用案例,但似乎如果您使用的是 Amazon Cloudfront,则依赖项未正确缓存并出现一些问题。 仅当您使用的是 Cloudfront 时,才会执行此操作。 您可以通过绕过 Cloudfront 进行测试,它应该可以正常工作。 正在与 Cloudfront 进行修复。

希望这对某人有用。

相关内容

  • 没有找到相关文章

最新更新