您将如何使用 phantomjs 通过 mandrill 发送邮件?
Posted
技术标签:
【中文标题】您将如何使用 phantomjs 通过 mandrill 发送邮件?【英文标题】:How would you send a mail through mandrill with phantomjs? 【发布时间】:2013-05-10 12:13:18 【问题描述】:我正在使用 phantomjs 进行一些屏幕抓取。我正在尝试实现一个错误处理系统,该系统在刮板失败时使用 mandrill api https://mandrillapp.com/api/docs/messages.html 发送电子邮件。
mandrill api 采用如下所示的 post 方法。
var data =
"key": "VdFwNvj-dLwaI6caAh8ODg",
"message":
"html": "This aggression will not stand",
"text": "This aggression will not stand",
"subject": "example subject",
"from_email": "the-dude@gmail.com",
"from_name": "The Dude",
"to": [
"email": "lebowski@gmail.com",
"name": "lebowski"
]
,
"async": false
;
$.ajax(
type: "POST",
url: 'https://mandrillapp.com/api/1.0/messages/send.json',
data: data
);
【问题讨论】:
【参考方案1】:我花了一些时间试图得到答案,但没有任何乐趣。我最终使用:http://httpbin.org/post 进行了测试,以找出 mandril 未能处理我的请求的原因,结果发现数据没有正确发送。 PhantomJS 文档也不正确。正是这个例子:https://github.com/adrianchung/phantomjs/blob/069ab5dea4c07c61a0ac259df0ff219ade1e8225/examples/postjson.js 最终给了我缺失的部分。 mandrill 文档也非常有用:https://mandrillapp.com/api/docs/messages.JSON.html
我完成的代码:
var page = require('webpage').create();
var email_url = 'https://mandrillapp.com/api/1.0/messages/send.json';
//email_url = 'http://httpbin.org/post'; // When testing
var email_data =
key: "your-key",
"message":
"text": email_message_text,
"subject": "Your subject",
"from_email": "your email",
"from_name": "Kris",
"to": [
"email": "your email",
"name": "Kris"
]
,
"async": false
;
var email_headers =
"Content-Type": "application/json"
;
page.open(
email_url,
'post',
JSON.stringify(email_data), // You need to stringify the json or it doesn't work
email_headers,
function (status)
if (status !== 'success')
PrintError('FAIL to email results');
else
var result = page.evaluate(function ()
return document.body.innerText;
);
Print('Email successfully sent\n' + result);
phantom.exit();
);
【讨论】:
【参考方案2】:最简单的方法是启动一个新页面来进行 RESTful 调用,然后您可以使用 page.evaluate 来读取结果。虽然它不像 jQuery ajax 方法那么简单,但您可以轻松创建对象以简化其使用。
var page = require('webpage').create(),
url = 'https://mandrillapp.com/api/1.0/messages/send.json',
data =
"key": "VdFwNvj-dLwaI6caAh8ODg",
"message":
"html": "This aggression will not stand",
"text": "This aggression will not stand",
"subject": "example subject",
"from_email": "the-dude@gmail.com",
"from_name": "The Dude",
"to": [
"email": "lebowski@gmail.com",
"name": "lebowski"
]
,
"async": false
;
page.open(url, 'POST', data, function (status)
if (status !== 'success')
console.log('FAIL to load the log');
else
console.log('Log success');
var result = page.evaluate(function ()
return document.body.innerText;
);
console.log("log Result: " + result);
);
【讨论】:
以上是关于您将如何使用 phantomjs 通过 mandrill 发送邮件?的主要内容,如果未能解决你的问题,请参考以下文章
phantomjs:如何在phantomjs中使用npm模块?