【问题标题】:How do I send a POST request through a form while also sending an email of the form contents?如何通过表单发送 POST 请求,同时发送表单内容的电子邮件?
【发布时间】:2014-05-15 14:12:29
【问题描述】:

我有一个由 Mailchimp(电子邮件活动服务)创建的表单,允许用户订阅时事通讯。我想在提交表单并发布原始表单操作后发送表单内容的电子邮件。

我使用 php mail() 函数来执行此链接,它工作正常: Send email with PHP from html form on submit with the same script

但我不知道如何从我的订阅表单提交原始发布操作:

<form action="http://mailchimpurl.com/subscribe/post" method="POST">

再次,我想发送一封包含表单内容的电子邮件,并发送订阅发布请求。

感谢您的帮助!

【问题讨论】:

  • 你在网站上使用 jQuery 吗?如果这是一个选项,这将非常简单。
  • 是的,我正在使用 jQuery。想解释一下如何?
  • 查看 John 的回答(也许请他详细说明 ajax 的处理方式),他的回答正是我的目标。虽然 Quentin 是正确的,但如果你有访问权限,你会更好地使用 mailchimp api
  • 好的,我发布了解决方案

标签: php html forms email post


【解决方案1】:

一般来说,任何表单最好提交到一个端点,并且只提交一个端点。

将操作设置为指向您自己的服务器。然后让处理请求的程序(按顺序)做两件不同的事情。

  1. 使用您已有的脚本向您发送电子邮件
  2. 为用户订阅邮件列表,使用your service provider's API

【讨论】:

  • 谢谢,这是有道理的。但是有没有办法使用 Mailchimp 为我生成的表单,这样我就不必使用 API?
  • 不是我推荐使用的。您可以使用 JS 停止提交的表单,然后使用 JS 收集其中的数据并将其发送到您的服务器,然后等待响应,然后使用 JS 触发表单提交……但这很棘手,并且取决于 JS。
【解决方案2】:

如果您的操作指向您无法添加任何 php mail() 或类似的位置,我会考虑使用 JS/jQuery/ajax 触发此客户端。

var sendEmail = 'youremailpage.php?email=you@youremail.com&subject=....'

$("#submit").click(function(){
  // use ajax to trigger an external php file with mail()
  $.ajax({ url: sendEmail, data: {action: sendEmail}, type: "post", success: function(output) {  } }); 
 });

在 PHP 文件中,我只是使用 $_GET('email') 等提取所有 url 参数...

thisthis 之类的东西是类似的技术,使用 $.post 代替,虽然我自己没有测试过。

【讨论】:

  • “在这里发送电子邮件”?如何? jQuery 没有任何电子邮件发送功能。
  • 据我了解,您无法通过 javascript 发送电子邮件。你打算怎么做?
  • "使用 ajax 发送电子邮件" - 那行不通。在发送 HTTP 请求之前,表单将提交,JS 执行环境将消失。
  • 我使用类似的东西来触发 php 文件而不刷新页面,但不是专门针对表单提交。也许更精通 jQuery 的人可以提供更好的答案。
  • @StephenL 在我的回答中详细阐述了一点。
【解决方案3】:
$('#yourform').submit( function(ev) {
    ev.preventDefault(); //stop form submitting

    theform = this;

    $.post( "example.php", $(this).serialize()).done(function() {
        theform.submit();
    });

}); 

【讨论】:

  • 这不适合我。从 form.submit(); 得到“未捕获的类型错误:对象不是函数”。如果我在.done(function(){}) 中尝试$('#yourform').submit();,我会得到一个无限循环。
  • @StephenL 请尝试为全局变量使用不同的名称,我已在编辑中将其更改为“theform”。我相信这可能是您错误的根源
  • 我不认为这是问题所在,我尝试了form1=this 并得到了同样的错误。
  • @StephenL 是的,但是你的页面上有 id="form1" 的任何元素吗?如果是,那会使解析器感到困惑。为变量选择一个完全唯一的名称,例如hskfyyeknnso = this; 进行仔细检查。
  • 我只见过这个错误,变量名冲突(如我所料)或语法错误(缺少分号等)。
【解决方案4】:

我已经找到了解决这个问题的方法。使用 PHP CURL,我能够向我的 mailchimp url 发送一个发布请求。这是我使用的博客文章的链接。

http://davidwalsh.name/curl-post

【讨论】:

    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多