adobe muse 表单不发送电子邮件
adobe muse form not sending emails
我在我的 muse 创建的网站上使用联系表单小部件。电子邮件未发送,我不断收到以下错误消息:
"Form PHP script is missing from web server, or PHP is not configured
correctly on your web hosting provider. Check if the form PHP script
has been uploaded correctly, then contact your hosting provider about
PHP configuration"
我还负责服务器和使用 AWS EC2 实例 (Amazon Linux AMI)。
When I ran the form_check.php script I got green checkmarks on the
first two of the following three checks. The third check was a Red
Cross.
PHP version ok
Mail configuration: No known problems detected with php mail
configuration.
Spam control: Form may send email successfully, but limiting spam
submissions by IP address will not work.
不确定这是问题所在还是其他原因。
编辑#1
好的,所以第三个检查项不是绿色的原因是服务器上没有安装MYSQL。安装后 MYSQL 所有三个都被选中绿色但是电子邮件仍然没有发送。
我使用 PHPMailer 让它工作。
首先去https://github.com/PHPMailer/PHPMailer获取依赖。我刚刚下载了 zip 并在我的 /var/www/html 文件夹中安装了 PHPMailer-master 目录。
唯一需要做的就是修改 form_process.php 文件。
在那个文件中我做了两件事。第一个是为上面链接的 PHPMailer 页面上显示的 PHPMailer 添加 require 语句。重要的是你在顶部而不是在任何函数中执行此操作:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
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', '\r\n');
$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 变量。
总而言之,请确保您的服务器上安装了 lamp 堆栈 (Linux/Apache/PHP/MYSQL)。无需更改任何配置或 ini 文件。
其次,从 PHPMailer 下载 zip 并复制到您的服务器。
第三次修改上面显示的函数form_process.php
这对我有用,我的电子邮件发送正确。
我剩下的一个问题与我的用例非常相关,但似乎如果您使用的是 Amazon Cloudfront,则依赖项未正确缓存并且会出现一些问题。这仅在您使用 Cloudfront 时才适用。您可以绕过 Cloudfront 进行测试,它应该可以正常工作。使用 Cloudfront 进行修复。
希望这对某人有用。
我在我的 muse 创建的网站上使用联系表单小部件。电子邮件未发送,我不断收到以下错误消息:
"Form PHP script is missing from web server, or PHP is not configured correctly on your web hosting provider. Check if the form PHP script has been uploaded correctly, then contact your hosting provider about PHP configuration"
我还负责服务器和使用 AWS EC2 实例 (Amazon Linux AMI)。
When I ran the form_check.php script I got green checkmarks on the first two of the following three checks. The third check was a Red Cross.
PHP version ok
Mail configuration: No known problems detected with php mail configuration.
Spam control: Form may send email successfully, but limiting spam submissions by IP address will not work.
不确定这是问题所在还是其他原因。
编辑#1
好的,所以第三个检查项不是绿色的原因是服务器上没有安装MYSQL。安装后 MYSQL 所有三个都被选中绿色但是电子邮件仍然没有发送。
我使用 PHPMailer 让它工作。
首先去https://github.com/PHPMailer/PHPMailer获取依赖。我刚刚下载了 zip 并在我的 /var/www/html 文件夹中安装了 PHPMailer-master 目录。
唯一需要做的就是修改 form_process.php 文件。
在那个文件中我做了两件事。第一个是为上面链接的 PHPMailer 页面上显示的 PHPMailer 添加 require 语句。重要的是你在顶部而不是在任何函数中执行此操作:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
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', '\r\n');
$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 变量。
总而言之,请确保您的服务器上安装了 lamp 堆栈 (Linux/Apache/PHP/MYSQL)。无需更改任何配置或 ini 文件。
其次,从 PHPMailer 下载 zip 并复制到您的服务器。
第三次修改上面显示的函数form_process.php
这对我有用,我的电子邮件发送正确。
我剩下的一个问题与我的用例非常相关,但似乎如果您使用的是 Amazon Cloudfront,则依赖项未正确缓存并且会出现一些问题。这仅在您使用 Cloudfront 时才适用。您可以绕过 Cloudfront 进行测试,它应该可以正常工作。使用 Cloudfront 进行修复。
希望这对某人有用。