弹出联系表单中的Heroku + Gmail SMTP + PHP邮件

时间:2013-09-03 16:43:05

标签: php ajax email heroku gmail

您好我正在尝试创建一个弹出联系表单,在heroku和gmail上发送邮件,因为它的邮件服务器是link。弹出部分没关系,但是无法发送邮件帮我找到问题。我的想法是使用gmail作为heroku的第三方服务器,我理解这是可能的。谢谢你的帮助

index.html文件 js part

 <!-- contact form pop -->
<script>
      $(document).ready(function () {
          $("input#submit").click(function(){
             $.ajax({
                         type: "POST",
                         url: "process.php", //process to mail
                         data: $('form.contact_body').serialize(),
                                 success: function(msg){
                                 $("#thanks").html(msg) //hide button and show thank you
                                 $("#contact").modal('hide'); //hide popup
                                 },
                                 error: function(){
                                        alert("sorry the message could not be send");
                                 }
                               });
                  });
             });
  </script>

标记部分

      <div class="modal-body">
        <form class="contact_body" name="contact_body">
          <label class="label" for="form_name">Your Name</label><br>
          <input type="text" name="form_name" id="form_name" class="input-xlarge"><br>
          <label class="label" for="form_email">Your E-mail</label><br>
          <input type="form_email" name="form_email" class="input-xlarge"><br>
          <label class="label" for="form_msg">Enter a Message</label><br>
          <textarea name="form_msg" class="input-xlarge"></textarea>
         </form>
       </div>
       <div class="modal-footer">
         <input class="btn btn-success" type="submit" value="Send!" id="submit">
         <a href="#" class="btn" data-dismiss="modal">Nah.</a>
       </div>
     </div>

process.php文件

<?php

// Pear Mail Library
require_once "Mail.php";

$from = '<from.gmail.com>';
$to = '<to.yahoo.com>';
subject = 'Hi!';
$body = "Hi,\n\nHow are you?";

$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
    'host' => 'ssl://smtp.gmail.com',
    'port' => '465',
    'auth' => true,
    'username' => 'moviply.tv@gmail.com',
    'password' => 'pass'
));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    echo('<p>' . $mail->getMessage() . '</p>');
 } else {
echo('<p>Message successfully sent!</p>');
}


/*
$myemail = 'moviply.tv@gmail.com';
if (isset($_POST['name'])) {
$name = strip_tags($_POST['name']);
$email = strip_tags($_POST['email']);
$message = strip_tags($_POST['message']);
echo "<span class=\"alert alert-success\" >Your message has been received. Thanks!      Here   is what you submitted:</span><br><br>";
echo "<stong>Name:</strong> ".$name."<br>";
echo "<stong>Email:</strong> ".$email."<br>";
echo "<stong>Message:</strong> ".$message."<br>";


$to = $myemail;
$email_subject = "Contact form submission: $name";
$email_body = "You have received a new message. ".
" Here are the details:\n Name: $name \n ".
"Email: $email\n Message \n $message";
$headers = "From: $myemail\n";
$headers .= "Reply-To: $email";
mail($to,$email_subject,$email_body,$headers);
*/

?>

3 个答案:

答案 0 :(得分:1)

我的第一个猜测:process.php顶部地址的$ to / $应该是(a)真实消息,并且如果起始地址不是您自己的电子邮件地址,(b)可能会失败,所以你是不要像其他人一样发送垃圾邮件。

SendGrid库使用非常简单,但同样应该有一个真正的“来自”地址(可能是你自己的),否则当SG传送到你的gmail帐户时,它不会因为某些未知来自垃圾邮件而变成垃圾邮件地址一遍又一遍。

(披露,我为SendGrid工作)

答案 1 :(得分:0)

我担心gmail目前正在阻止此服务,并且必须有另一条路径来解决更简单的问题。除非您使用谷歌应用程序(现在的价格是每月5美元)。

服务器确实给了heroku自己的Sendgrid插件200(ok)答案。因此,临时解决方案是使用send-grid并在必要时将其迁移到其他东西,因为它仍然没有经过我的全面测试。

答案 2 :(得分:0)

我认为您应该检查您的Gmail帐户配置,请在此答案中找到清单:https://stackoverflow.com/a/45477794/1891220

  

如果您想通过Gmail smtp发送电子邮件,则需要检查两件重要事项:

     
      
  1. 您的应用配置:

         
        
    • 主持人:smtp.gmail.com
    •   
    • 端口:587465(tls为587,ssl为465)
    •   
    • 协议:tlsssl
    •   
    • 用户:YOUR_USERNAME@gmail.com
    •   
    • 密码:YOUR_PASSWORD
    •   
  2.   
  3. 指定的Gmail帐户设置:

         
  4.