Google应用程序脚本使用UrlFetchApp向phpMail发送post请求

Google应用程序脚本使用UrlFetchApp向phpMail发送post请求,php,email,google-apps-script,phpmailer,Php,Email,Google Apps Script,Phpmailer,我想用UrlFetchApp发送数据,但有些东西不起作用。我不明白问题出在哪里,我们对此不是很有经验,有人能给我解释一下如何配置这两个文件来发送和接收参数吗 谷歌应用程序脚本: function sendEXTmail(name,email,subject,body) { var url = "http://www.mysite.com/willy.php"; var options = { "method": "post", "payload": {

我想用UrlFetchApp发送数据,但有些东西不起作用。我不明白问题出在哪里,我们对此不是很有经验,有人能给我解释一下如何配置这两个文件来发送和接收参数吗

谷歌应用程序脚本:

function sendEXTmail(name,email,subject,body) {

   var url = "http://www.mysite.com/willy.php";
   var options = {
      "method": "post",
      "payload": {
      "From_Name": "Fix Name",
      "From_Email": "fix_mail@domain.com",
      "To_Name": name,
      "To_Email": email,
      "Subject": subject,
      "Message": body
      }
   };
   var response = UrlFetchApp.fetch(url, options);
   return response;
}
PHP:

需要“phpmailer/class.phpmailer.php”;
$from_name=(isset($_POST['from_name']))$_帖子['From_Name']:'';
$from_email=(isset($_POST['from_email']))$_POST['From_Email']:'';
$to_name=(isset($_POST['to_name']))$_帖子['To_Name']:'';
$to_email=(isset($_POST['to_email']))$_发布['To_Email']:'';
$subject=(isset($_POST['subject']))$_帖子['Subject']:'';
$message=(isset($\u POST['message']))$_POST['Message']:'';
$mail=new PHPmailer();
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->Host=“localhost”;
$mail->Port=25;
$mail->SMTPSecure=“无”;
$mail->SMTPAuth=false;
$mail->addReplyTo($from_email,$from_name);
$mail->From=$From\u email;
$mail->FromName=$from\u name;
$mail->addAddress($to_email,$to_name);
$mail->Subject=$Subject;
$mail->Body='.$message';
如果(!$mail->Send()){
echo$mail->ErrorInfo;
}否则{
回音“电子邮件因维塔科雷塔门特!”;
}
$mail->SmtpClose();
未结算($邮件);
?>

在谷歌应用程序脚本端,您可以使用
UrlFetchApp.getRequest()
查看要发送的消息。例如:

   // Log readable JSON object
   Logger.log( 
     JSON.stringify(
       UrlFetchApp.getRequest(url,options),
       null, 2 )); 
下面是它记录的内容:

[15-05-06 22:23:35:144 EDT] {
  "headers": {
    "X-Forwarded-For": "99.224.168.137"
  },
  "useIntranet": false,
  "followRedirects": true,
  "payload": "From_Name=Fix+Name&Subject=subject_param&Message=body&From_Email=fix_mail@domain.com&To_Email=email@example.com&To_Name=name_param",
  "method": "post",
  "contentType": "application/x-www-form-urlencoded",
  "validateHttpsCertificates": true,
  "url": "http://www.example.com/willy.php"
}
基于此,您的函数似乎准备了一个POST请求,该请求应该与您的PHP匹配

接下来,检查POST本身的结果。为此,首先使用
muteHttpExceptions
选项,然后使用查找并处理函数中的返回代码。此外,要从响应中获取可读文本,请使用
response.getContentText()
。这可能看起来是这样的:

function sendEXTmail(name,email,subject,body) {
   name = name || "name_param";
   email = email || "email@example.com";
   subject = subject || "subject_param";
   body = body || "body";

   var url = "http://www.example.com/willy.php";
   var options = {
      "muteHttpExceptions": true,
      "method": "post",
      "payload": {
      "From_Name": "Fix Name",
      "From_Email": "fix_mail@domain.com",
      "To_Name": name,
      "To_Email": email,
      "Subject": subject,
      "Message": body
      }
   };

   // Log readable JSON object
   Logger.log( 
     JSON.stringify(
       UrlFetchApp.getRequest(url,options),
       null, 2 )); 

   var response = UrlFetchApp.fetch(url, options);

   var rc = response.getResponseCode();
   if (rc !== 200) {
     // Failure - log it
     Logger.log( "Error %s: %s", rc, response.getContentText())
   }

   return response.getContentText();
}

用你真正的URL试试这个,看看你得到了什么。如果是
200
,那么交换的谷歌应用程序脚本端工作正常。如果没有,响应应该告诉您更多关于故障性质的信息,并帮助您找到解决方案。

到底是什么不起作用?不是发邮件吗?它不返回数据吗?如果它不发送电子邮件,您是否确实在本地主机上运行了可以发送电子邮件的SMTP服务器?
function sendEXTmail(name,email,subject,body) {
   name = name || "name_param";
   email = email || "email@example.com";
   subject = subject || "subject_param";
   body = body || "body";

   var url = "http://www.example.com/willy.php";
   var options = {
      "muteHttpExceptions": true,
      "method": "post",
      "payload": {
      "From_Name": "Fix Name",
      "From_Email": "fix_mail@domain.com",
      "To_Name": name,
      "To_Email": email,
      "Subject": subject,
      "Message": body
      }
   };

   // Log readable JSON object
   Logger.log( 
     JSON.stringify(
       UrlFetchApp.getRequest(url,options),
       null, 2 )); 

   var response = UrlFetchApp.fetch(url, options);

   var rc = response.getResponseCode();
   if (rc !== 200) {
     // Failure - log it
     Logger.log( "Error %s: %s", rc, response.getContentText())
   }

   return response.getContentText();
}