我被难住了:如何使用 PHP Mailer 发送 HTML 表单
Posted
技术标签:
【中文标题】我被难住了:如何使用 PHP Mailer 发送 HTML 表单【英文标题】:I'm Stumped: How to Send HTML Form using PHP Mailer 【发布时间】:2021-06-06 13:13:52 【问题描述】:好的,所以在过去的几天里我做了大量的研究并且很困惑。我有 XAMPP 和 php Mailer,我知道它们都在本地正常工作。
我还有一个我知道使用 Hostgator 网络托管可以正常工作的 html 表单。这个 HTML 表单调用了一个名为 send_email.php 的 .php 文件,它将表单内容发送到我的电子邮件。
我的问题是:
-
使用 PHP Mailer 在我的本地主机 (XAMPP) 上发送此 HTML 表单的新 .php 代码(粗略地说)是什么?
如何在我的 HTML 文件中调用新的 .php 文件?
对于这个 HTML 表单和 PHP Mailer 用来发送它的新 .php 文件,我需要什么文件树结构?
请注意:我更改了代码中的一些细节,因此我不包括我的实际电子邮件地址和个人信息。
这是我的表格:
<!-- THE SUBMISSION FORM -->
<div class="container">
<form id="contact" action="send_email.php" method="post">
<h3>Apply Today!</h3>
<h4></h4>
<fieldset>
<input placeholder="Full Name" type="text" name="name" tabindex="1" required autofocus>
</fieldset>
<fieldset>
<input placeholder="Telephone Number" type="tel" name="telephone" tabindex="2" required>
</fieldset>
<fieldset>
<input placeholder="Email Address" type="email" name="email" tabindex="3" required>
</fieldset>
<fieldset>
<input placeholder="Subject" type="text" name="subject" tabindex="4" required>
</fieldset>
<fieldset>
<textarea placeholder="Type your Message Here...." name="message" tabindex="5" required></textarea>
</fieldset>
<fieldset>
<button name="submit" type="submit" id="contact-submit" data-submit="...Sending" tabindex="6">Submit</button>
</fieldset>
</form>
</div>
这是我正在使用的 send_email.php 文件(我知道它有效)
<?php session_start();
if(isset($_POST['submit']))
$from = "sender@gmail.com";
$to = "receiver1@gmail.com";
$to2 = "receiver2@gmail.com";
$to3 = "receiver3@gmail.com";
$subject = "NEW LEAD!";
$message =
"|---------BEGIN TRANSMISSION----------|" . PHP_EOL .
PHP_EOL . "The person that contacted you is: ". $_POST['name'] .
PHP_EOL . "E-mail: " . $_POST['email'] .
PHP_EOL . "Telephone: " . $_POST['telephone'] .
PHP_EOL . "Subject: " . $_POST['subject'] .
PHP_EOL . "Message: " . $_POST['message'] . PHP_EOL .
PHP_EOL . "|---------END TRANSMISSION----------|";
$headers = "From:" . $from;
echo "Thank you for contacting us. We will will be in touch.<br/>Go to <a href='/index.php'>Home Page</a>";
mail($to, $subject, $message, $headers);
mail($to2, $subject, $message, $headers);
mail($to3, $subject, $message, $headers);
else
echo "You must write a message. </br> Please go to <a href='/index.html'>Home Page</a>";
?>
这是我的 PHPMAILER 文件夹中的 index.php 文件(我知道它有效)。
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
//Load Composer's autoloader
require 'vendor/autoload.php';
//Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.gmail.com'; //Set the SMTP server to send through
//$mail->Host = gethostbyname('smtp.gmail.com');
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'sender@gmail.com'; //SMTP username
$mail->Password = 'sender-password'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
$mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Recipients
$mail->setFrom('receiver1@gmail.com', 'Mailer');
$mail->addAddress('receiver2@gmail.com', 'Dylan');
//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
catch (Exception $e)
echo "Message could not be sent. Mailer Error: $mail->ErrorInfo";
这是我在 XAMPP 上 PHP Mailer 的位置:
c:/Users/dylan/.bitnami/stackman/machines/xampp/volumes/root/htdocs/phpmailer
这是我的 HTML 表单和 send_email.php 的位置:
c:/Users/dylan/.bitnami/stackman/machines/xampp/volumes/root/htdocs/WEBSITE
【问题讨论】:
【参考方案1】:你对php的了解为0
-
首先,当您使用 .php 文件时,您可以在其中使用 html
你觉得这是个笑话吗?
try
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.gmail.com'; //Set the SMTP server to send through
//$mail->Host = gethostbyname('smtp.gmail.com');
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'sender@gmail.com'; //SMTP username
$mail->Password = 'sender-password'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
$mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Recipients
$mail->setFrom('receiver1@gmail.com', 'Mailer');
$mail->addAddress('receiver2@gmail.com', 'Dylan');
//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
catch (Exception $e)
echo "Message could not be sent. Mailer Error: $mail->ErrorInfo";
这是复制并粘贴到一个新的级别!
$mail->setFrom('receiver1@gmail.com', 'Mailer');
$mail->addAddress('receiver2@gmail.com', 'Dylan');
你需要设置它
整个代码都错了!
去首页”; 邮件($to,$subject,$message,$headers); 邮件($to2,$subject,$message,$headers); 邮件($to3,$subject,$message,$headers); 别的 echo "你必须写一条消息,请到首页"; ?>最后 这是我在 XAMPP 上的 PHP Mailer 的位置:
c:/Users/dylan/.bitnami/stackman/machines/xampp/volumes/root/htdocs/phpmailer
这是我的 HTML 表单和 send_email.php 的位置:
c:/Users/dylan/.bitnami/stackman/machines/xampp/volumes/root/htdocs/WEBSITE
您将 PHPMAILER 放在您的网页目录中!!!!!!!1
【讨论】:
【参考方案2】:您根本不必更改代码;无论从哪里运行,它都应该同样有效。只要您使用托管服务提供商允许的发送机制,例如他们不会阻止出站 SMTP,它应该可以正常工作。你试过了吗?
除此之外,您的文件结构看起来有点不寻常。 Composer 为您安装 PHPMailer 并在您请求时自动加载它,因此 composer 还负责它的存储位置;您不需要创建自己的 phpmailer
文件夹。如果您托管的是单个站点,则可能没有必要将内容放在 Web 根目录的子文件夹中,因此您可以使用更扁平的结构,例如:
c:/Users/dylan/.bitnami/stackman/machines/xampp/volumes/root/htdocs/
index.php
send_email.php
vendor/
composer/
phpmailer
如果您托管多个网站,您通常会在 .../htdocs/
中拥有多个文件夹,每个文件夹都具有相似的内部结构。
【讨论】:
以上是关于我被难住了:如何使用 PHP Mailer 发送 HTML 表单的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift Mailer、GMail 和 PHP 发送电子邮件,权限被拒绝错误
使用配置 PHP 文件和 PHP Mailer 将电子邮件发送到多个地址
尝试使用 swift mailer、gmail smtp、php 发送邮件
来自 php 表单的问题/错误,用于使用 php-mailer 库通过本地主机 Xampp 发送电子邮件