您好我正在尝试创建一个弹出联系表单,在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);
*/
?>
答案 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发送电子邮件,则需要检查两件重要事项:
您的应用配置:
- 主持人:
smtp.gmail.com
- 端口:
587
或465
(tls为587,ssl为465)- 协议:
tls
或ssl
- 用户:
YOUR_USERNAME@gmail.com
- 密码:
YOUR_PASSWORD
- 醇>
指定的Gmail帐户设置:
- 如果您为自己的帐户启用了两步验证,则可能需要输入App password。
- 没有两步验证:
- 允许less secure apps access到您的帐户。
- 访问http://www.google.com/accounts/DisplayUnlockCaptcha并使用您的Gmail用户名和密码登录。