【问题标题】:Google Apps Script send post request to phpMailer using UrlFetchAppGoogle Apps 脚本使用 UrlFetchApp 向 phpMailer 发送 post 请求
【发布时间】:2014-04-04 09:17:16
【问题描述】:

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

Google Apps 脚本:

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:

require "phpmailer/class.phpmailer.php";


$from_name = (isset($_POST['From_Name'])) ? $_POST['From_Name'] : '';
$from_email = (isset($_POST['From_Email'])) ? $_POST['From_Email'] : '';
$to_name = (isset($_POST['To_Name'])) ? $_POST['To_Name'] : '';
$to_email = (isset($_POST['To_Email'])) ? $_POST['To_Email'] : '';
$subject = (isset($_POST['Subject'])) ? $_POST['Subject'] : '';
$message = (isset($_POST['Message'])) ? $_POST['Message'] : '';

$mail= new PHPmailer();
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->Host = "localhost";
$mail->Port = 25;
$mail->SMTPSecure = "none";
$mail->SMTPAuth   = false;
$mail->addReplyTo($from_email, $from_name);
$mail->From       = $from_email;
$mail->FromName   = $from_name;
$mail->addAddress($to_email, $to_name);
$mail->Subject  = $subject;
$mail->Body = '<html>'.$message.'</html>';


if(!$mail->Send()){ 
  echo $mail->ErrorInfo; 
}else{ 
  echo 'Email inviata correttamente!';
}
$mail->SmtpClose();
unset($mail);
?>

【问题讨论】:

  • 究竟是什么不起作用?不是发邮件吗?不是返回数据吗?如果它不发送电子邮件,您是否真的在 localhost 上运行了一个可以发送电子邮件的 SMTP 服务器?

标签: php email google-apps-script phpmailer


【解决方案1】:

在 Google Apps 脚本方面,您可以使用 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"
}

基于此,您的函数似乎准备了一个与您的 PHP 匹配的 POST 请求。

接下来,检查 POST 本身的结果。为此,首先使用muteHttpExceptions 选项,然后使用HttpResponse.getResponseCode() 在您的函数中查找并处理返回码。此外,要从响应中获取可读文本,请使用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();
}

用你的真实网址试试这个,看看你会得到什么。如果它是200,则交易所的 Google Apps 脚本端工作正常。如果没有,回复应该会告诉您更多有关故障性质的信息,并帮助您找到解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    • 2020-08-31
    相关资源
    最近更新 更多