使用相同的脚本提交HTML格式的电子邮件
当用户完成填写HTML表单然后通过电子邮件发送表单中的信息时,我想用PHP发送电子邮件。 我想从显示具有表单的网页的脚本来完成。
我发现这个代码,但邮件不发送。
<?php if (isset($_POST['submit'])) { $to = $_POST['email']; $subject = $_POST['name']; $message = getRequestURI(); $from = "zenphoto@example.com"; $headers = "From:" . $from; if (mail($to, $subject, $message, $headers)) { echo "Mail Sent."; } else { echo "failed"; } } ?>
什么是用PHP发送电子邮件的代码?
编辑(#1)
如果我理解正确,你希望将所有内容都放在一个页面中,并从同一页面执行。
您可以使用以下代码从单个页面发送邮件,例如index.php
或contact.php
这个和我原来的答案之间唯一的区别是<form action="" method="post">
其中的操作已经空白。
最好使用header('Location: thank_you.php');
而不是PHP处理程序中的echo
,以便将用户redirect到其他页面。
将下面的整个代码复制到一个文件中。
<?php if(isset($_POST['submit'])){ $to = "email@example.com"; // this is your Email address $from = $_POST['email']; // this is the sender's Email address $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $subject = "Form submission"; $subject2 = "Copy of your form submission"; $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message']; $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message']; $headers = "From:" . $from; $headers2 = "From:" . $to; mail($to,$subject,$message,$headers); mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly."; // You can also use header('Location: thank_you.php'); to redirect to another page. } ?> <!DOCTYPE html> <head> <title>Form submission</title> </head> <body> <form action="" method="post"> First Name: <input type="text" name="first_name"><br> Last Name: <input type="text" name="last_name"><br> Email: <input type="text" name="email"><br> Message:<br><textarea rows="5" name="message" cols="30"></textarea><br> <input type="submit" name="submit" value="Submit"> </form> </body> </html>
原始答案
我不太确定问题是什么,但我的印象是要把这个信息的副本发给填写表格的人。
这里是一个HTML表单和PHP处理程序的testing/工作副本。 这使用PHP mail()
函数。
PHP处理程序还会将消息的副本发送给填写表单的人员。
如果你不打算使用它,你可以在一行代码的前面使用两个正斜杠。
例如: // $subject2 = "Copy of your form submission";
将不会执行。
HTML格式:
<!DOCTYPE html> <head> <title>Form submission</title> </head> <body> <form action="mail_handler.php" method="post"> First Name: <input type="text" name="first_name"><br> Last Name: <input type="text" name="last_name"><br> Email: <input type="text" name="email"><br> Message:<br><textarea rows="5" name="message" cols="30"></textarea><br> <input type="submit" name="submit" value="Submit"> </form> </body> </html>
PHP处理程序(mail_handler.php)
(使用来自HTML表单的信息并发送电子邮件)
<?php if(isset($_POST['submit'])){ $to = "email@example.com"; // this is your Email address $from = $_POST['email']; // this is the sender's Email address $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $subject = "Form submission"; $subject2 = "Copy of your form submission"; $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message']; $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message']; $headers = "From:" . $from; $headers2 = "From:" . $to; mail($to,$subject,$message,$headers); mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly."; // You can also use header('Location: thank_you.php'); to redirect to another page. // You cannot use header and echo together. It's one or the other. } ?>
以HTML格式发送:
如果您希望以HTML格式和两种格式发送邮件,则需要创build两个不同variables名称的HTML标头。
阅读mail()
上的手册以了解如何以HTML格式发送电子邮件:
脚注:
- 关于HTML5
您必须使用action属性指定将处理提交的数据的服务的URL。
如在https://www.w3.org/TR/html5/forms.html下;4.10.1.3configuration表单与服务器进行通信一样 。 有关完整信息,请参阅该页面。
因此, action=""
在HTML5中不起作用。
正确的语法是:
-
action="handler.xxx"
或 -
action="http://www.example.com/handler.xxx"
。
请注意, xxx
将是用于处理该过程的文件types的扩展。 这可能是一个.php
, .cgi
, .pl
, .jsp
文件扩展名等。
如果发送邮件失败,请参阅Stack的以下问答:
- PHP邮件表单不能完成发送电子邮件
PHP脚本连接到SMTP服务器并在Windows 7上发送电子邮件
在Windows中从PHP发送电子邮件是一个有陷阱和头部划痕的雷区。 我将尝试引导您通过一个实例在Windows 7和PHP 5.2.3(IIS)Internet信息服务Web服务器下工作。
我假设你不想使用任何包含电子邮件发送function的CodeIgniter或Symfony等预构build的框架。 我们将从独立的PHP文件发送电子邮件。 我从codeigniter引擎盖(系统/库下)获得这个代码,并修改它,所以你可以放在这个Email.php文件,它应该只是工作。
这应该与较新版本的PHP一起工作。 但你永远不知道。
步骤1,您需要使用SMTP服务器的用户名/密码:
我正在使用smtp.ihostexchange.net
已经创build和设置我的smtp服务器。 如果你没有这个,你不能继续。 你应该可以使用电子邮件客户端,如thunderbird,evolution,Microsoft Outlook来指定你的smtp服务器,然后通过那里发送邮件。
第2步,创build您的Hello World电子邮件文件:
我假设你正在使用IIS。 因此,在C:\inetpub\wwwroot
下创build一个名为index.php的文件,并将这个代码放在这里:
<?php include("Email.php"); $c = new CI_Email(); $c->from("FromUserName@foobar.com"); $c->to("user_to_receive_email@gmail.com"); $c->subject("Celestial Temple"); $c->message("Dominion reinforcements on the way."); $c->send(); echo "done"; ?>
你应该可以通过在浏览器中浏览localhost / index.php来访问这个index.php,因为Email.php丢失,它会发出错误。 但请确保至less可以从浏览器运行它。
第3步,创build一个名为Email.php
的文件:
在C:\inetpub\wwwroot
下新build一个名为Email.php的文件。
将这个PHP代码复制/粘贴到Email.php中:
https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php
由于有很多种类的smtp服务器,你将不得不手动摆弄Email.php
顶部的Email.php
。 我已经设置它,所以它会自动与smtp.ihostexchange.net
,但您的smtp服务器可能会有所不同。
例如:
- 将smtp_port设置设置为您的smtp服务器的端口。
- 将smtp_crypto设置设置为您的smtp服务器所需的设置。
- 设置$ newline和$ crlf,使其与您的smtp服务器使用的兼容。 如果你选错了,那么smtp服务器可能会无视你的请求。 我使用\ r \ n,因为您可能
\n
是必需的。
链接的代码太长,无法粘贴为一个stackoverflow答案,如果你想编辑它,留下评论在这里或通过github,我会改变它。
第4步,确保你的php.ini启用了ssl扩展:
find你的PHP.ini文件并取消注释
;extension=php_openssl.dll
所以它看起来像:
extension=php_openssl.dll
第5步,运行你刚刚在浏览器中创build的index.php文件:
你应该得到以下输出:
220 smtp.ihostexchange.net Microsoft ESMTP MAIL Service ready at Wed, 16 Apr 2014 15:43:58 -0400 250 2.6.0 <534edd7c92761@summitbroadband.com> Queued mail for delivery lang:email_sent done
第6步,检查您的电子邮件和垃圾邮件文件夹:
访问user_to_receive_email@gmail.com的电子邮件帐户,您应该收到一封电子邮件。 它应该在5或10秒内到达。 如果没有,请检查页面上返回的错误。 如果这样做不行的话,可以尝试在谷歌键盘上捣烂你的脸,同时吟唱:“在杂货店工作并不是那么糟糕。
如果还没有,请查看您的php.ini
,并确保[mail function]
设置下的参数设置正确,以激活电子邮件服务。 您可以使用PHPMailer库并按照说明进行操作。
您也可以使用mandrill应用程序发送邮件在PHP中。 您将从https://mandrillapp.com/api/docs/index.php.html获得API,您可以在其中find有关发送的电子邮件和其他详细信息的完整详细信息。;
您需要在表单中添加一个action
如:
<form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'> <!-- All your input for the form here --> </form>
然后把你的代码片段放在文件顶部发送邮件。 什么echo($_SERVER['PHP_SELF']);
确实是它将您的信息发送到脚本的顶部,以便您可以使用它。
这里是我使用的PHP邮件设置:
//Mail sending function $subject = $_POST['name']; $to = $_POST['email']; $from = "zenphoto@example.com"; //data $msg = "Your MSG <br>\n"; //Headers $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=UTF-8\r\n"; $headers .= "From: <".$from. ">" ; mail($to,$subject,$msg,$headers); echo "Mail Sent.";
你需要一个SMPT服务器
... mail($to,$subject,$message,$headers);
上class。
你可以尝试轻量级的SMTP服务器,如xmailer
我认为原始代码中的一个错误可能是它有:
$message = echo getRequestURI();
代替:
$message = getRequestURI();
(这个代码已经被编辑过了。)