我想下载我每天都在收件箱中收到的报告。 此电子邮件包含指向平台的链接(我必须在平台上登录以正确打开链接,否则我将被重定向到登录页面),最后还有另一个链接将报告下载到我的计算机。 / p>
我的问题是:可以制作一个可以自动执行此操作的PHP脚本吗?阅读电子邮件并确定链接很容易的所有过程,我想要一些指导方针继续工作。
谢谢!
答案 0 :(得分:1)
这可能比您预期的更难,并且PHP可能不是实现您所需的最佳语言,因为它无法在Outlook或任何其他基于桌面的电子邮件客户端上运行。为此,您必须从命令行运行PHP代码,并将其设置为定期拦截您的所有电子邮件,并检查该电子邮件是否来自特定用户,如果它是解析两个必要的电子邮件链接。获得链接后,您可以让代码与登录表单建立cURL连接并传递用户名和密码,确保传递从经过身份验证的会话定义的任何cookie,然后建立到下载链接的新cURL链接以下载将文件发送到本地文件系统,之后您可以向自己发送一封新电子邮件,将该文件作为本机附件附加,具体取决于文件大小。
有关使用cURL发送Cookie的信息,请访问How can I send cookies using PHP curl in addition to CURLOPT_COOKIEFILE?
最终结果是,这必须连续在后台运行,并且必须设置为定期连接到您的电子邮件服务器,并检查所有电子邮件是否存在来自自动电子邮件发件人的电子邮件。
更简单的解决方案是找出是否可以将自动化工具设置为简单地将文件作为电子邮件附件发送,这样您就不必运行多余的代码。此外,只要初始电子邮件结构发生更改或下载或登录链接发生更改,您就必须更新代码以处理相关更改。
主要的一点是,PHP并不是您尝试做的最理想的解决方案,而且您尝试做的事情,无论用哪种语言,都将是一项复杂的任务。
答案 1 :(得分:0)
当您已经拥有电子邮件链接时,您可以使用curl请求登录平台,然后再次拨打相同的电话。您第二次登录并且卷曲会下载您的报告。
答案 2 :(得分:0)
您可以使用cURL库。
您的平台如何识别您的身份?如果您可以使用cookies,请寻找
CURLOPT_COOKIE
curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());
答案 3 :(得分:0)
我有一个类似的问题,我想在googlesheets上从我的电子邮件中打开一系列报告,即使附件是zip,也设法做到了,但是当它只有一个链接o不能执行时,这里是脚本我使用了,也许有人可以升级以打开链接并导入csv
function importCSV() {
// Change the report name Report
var threads = GmailApp.search("subject:XXXXXX has:attachment from:XXXXX@google.com newer_than:1d");
var message = threads[0].getMessages()[threads[0].getMessages().length-1];
var allAttachment = message.getAttachments();
var attachment = allAttachment[0];
var contentType = attachment.getContentType();
var name = attachment.getName();
if (attachment.getContentType() === "text/csv") {
// Change the sheet name, where you want the data to appear
var sheetActive = SpreadsheetApp.openById("1slVepI8s2Ekdiha0u4NpqFLZ4NnJrhyc8in9hYNzJA0");
var sheet = sheetActive.getSheetByName("Youtube");
var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
// This clears the document from previous data
sheet.clearContents().clearFormats();
// Import the CSV file to the spreadsheet
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
else if (attachment.getContentType() === "application/zip") {
attachment.setContentTypeFromExtension();
// Unzip Attachment Change the sheet name, where you want the data to appear
var sheetActive = SpreadsheetApp.openById("1slVepI8s2Ekdiha0u4NpqFLZ4NnJrhyc8in9hYNzJA0");
var sheet = sheetActive.getSheetByName("Youtube");
try {
var unzip = Utilities.unzip(attachment)[0];
var csv = unzip.getDataAsString();
var csvData2 = Utilities.parseCsv(csv, ",");
// This clears the document from previous data
sheet.clearContents().clearFormats();
// Import the CSV file to the spreadsheet
sheet.getRange(1, 1, csvData2.length, csvData2[0].length).setValues(csvData2);
} catch (e) {
// Logs an ERROR message.
console.error('myFunction() yielded an error: ' + e);
}
}}