【问题标题】:Sending via email info from a contact form with PHP使用 PHP 从联系表中通过电子邮件发送信息
【发布时间】:2013-02-04 03:17:27
【问题描述】:

首先我想说我只是 php 的新手。

我有这个简单的 php,就目前而言,当它发送信息时,它会显示一个可怕的“Ok”消息。

你能帮我改进这个 php: -更好的代码(可以吗?可以更好吗?) -我想添加一个更漂亮的答案(比如在一个盒子或类似的东西中),以告知用户他的消息已发送。

另一件事是我不确定这是否有效。我安装了 xampp,但在本地它无法正常工作。我还尝试使用上传到服务器的所有文件填写表格,但我仍在等待它们......邮件到达我的收件箱的奇迹? =S 也许我做错了什么?

<?php
if(isset($_POST["nombre"]) && isset($_POST["email"]) && isset($_POST["consulta"])){
$mymail = "myemail@gmail.com";
$subject = "Consulta";
$contenido = ":: Nombre: ". $_POST["nombre"]."\n";
$contenido .= ":: E-mail: ". $_POST["email"]."\n";
$contenido .= ":: Escribiò el siguiente mensaje: ". $_POST["consulta"]."\n";

$header = "From:".$_POST["email"]."\n"; 

mail($mymail, $subject, utf8_decode($contenido));*/
echo "&estatus=ok&";
}?>

提前感谢您的帮助! 问候,

【问题讨论】:

    标签: php forms email contact feedback


    【解决方案1】:

    在了解 PHP 和邮件功能方面,Link 是一个很好的资源(一般来说,PHP/web 编码的网站也是如此。
    您给用户的消息在最后一行显示 echo "&status=ok&"; Echo 是向页面输出文本的函数。如果你知道 html,你可以输出任何你想要的 html,例如

    echo "<b>This success message is in BOLD</b>";
    

    不过,您需要小心使用引号,因为您需要 Escape 以及其他一些特殊字符,例如

    echo "This \"code\" will\nprint like \\\"this\\\"";
    

    看起来像

    This "code" will
    print like \"this\"
    

    无论如何,这是切线。至于你的 xampp,你必须配置你的 smtp 设置。看看这个Post

    如果您的问题得到解答,请告诉我:)

    【讨论】:

      【解决方案2】:

      好的,所以您的代码对我来说看起来不错,如果您想更改消息,您应该更改 echo 语句中的文本。喜欢echo "Some fancy html in here";。关于邮件未接收的第二个问题可能是由于 php 默认情况下依赖本地 smtp 服务器来发送邮件,这在 Windows 上不存在,因此如果您可能有 xampp 并且在 linux 上取决于很多,它根本不会发送它它可能正在发送它并将其放入您的垃圾邮件文件夹中的变量,或者它可能根本不发送它。如果您想使用第三方 smtp 服务器(例如您的 gmail)仅用于测试目的,最好和最简单的方法是使用一些库,例如:

      http://swiftmailer.org/docs/sending.html

      并定义第三方 smtp 详细信息。

      示例代码:

       require_once 'lib/swift_required.php';
      
      // Create the Transport
      $transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25)
        ->setUsername('your username')
        ->setPassword('your password')
        ;
      
      /*
      You could alternatively use a different transport such as Sendmail or Mail:
      
      // Sendmail
      $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
      
      // Mail
      $transport = Swift_MailTransport::newInstance();
      */
      
      // Create the Mailer using your created Transport
      $mailer = Swift_Mailer::newInstance($transport);
      
      // Create a message
      $message = Swift_Message::newInstance('Wonderful Subject')
        ->setFrom(array('john@doe.com' => 'John Doe'))
        ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
        ->setBody('Here is the message itself')
        ;
      
      // Send the message
      $result = $mailer->send($message);
      

      我觉得很简单,你也可以添加:

      if($result){ echo "Message has been sent"; }else{ echo "Error!"; }
      

      在最后。这应该可以解决问题...

      顺便说一句,gmail 的设置是:

      $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');
      

      并相应地使用您的 gmail 电子邮件和密码作为用户名和密码...

      【讨论】:

        【解决方案3】:

        这是一个大问题。

        首先,您想在本地进行测试,并使用一个简单的邮件客户端来检查您的邮件传输代理是否会将电子邮件发送到本地帐户。没有PHP

        然后将邮件再次发送到远程电子邮件帐户(gmail),无需 php

        然后让你的 PHP 在本地发送。

        最后尝试从 php 发送远程电子邮件。

        您的脚本需要验证输入表单中的输入参数,以避免垃圾邮件,例如www.w3schools.com 供初学者阅读。

        对于示例代码,下载并查看一些成熟的代码,例如 Drupal 或 Wordpress,看看他们是如何做到的。由于发送电子邮件最终取决于您的传输代理和远程端(SSL、TLS),这可能需要密钥身份验证才能允许接收邮件进行中继。

        Stack Exchange 上也有很多参考资料和示例。你需要自己做一些研究。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-27
          • 1970-01-01
          • 2012-02-25
          • 2020-03-23
          • 1970-01-01
          • 2020-12-20
          • 2020-05-20
          • 1970-01-01
          相关资源
          最近更新 更多