在Javascript中使用Gmail API发送带有HTML正文和~100KB PDF附件的邮件时,附件会正确显示在发件人的Gmail已发送文件夹中的邮件中,但不会显示在收件人的邮件中.
API调用是POST
:
https://www.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=media
Run Code Online (Sandbox Code Playgroud)
发送给API的请求正文是:
{
"headers": {
"Authorization": "Bearer authToken-removedForThisPost"
},
"method": "POST",
"contentType": "message/rfc822",
"contentLength": 134044,
"payload": "exampleBelow",
"muteHttpExceptions": true
}
Run Code Online (Sandbox Code Playgroud)
这是有效载荷的样子:
MIME-Version: 1.0
To: =?utf-8?B?TWlrZSBD?=<recipient@test.com>
CC: =?utf-8?B?TWlrZSBD?=<secondrecipient@gmail.com>
BCC: =?utf-8?B??=<bccrecipient@test.com>
From: =?utf-8?B?TWlrZSBxWXsd2lr?=<sender@test.com>
Subject: =?utf-8?B?subjectLine-removedForThisPost?=
Content-Type: multipart/alternative; boundary=__boundary__
--__boundary__
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
base64EncodedStringHere-removedForThisPost
--__boundary__
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
base64EncodedStringHere-removedForThisPost
--__boundary__
Content-Type: application/pdf; name="File Name.pdf"
Content-Disposition: attachment; filename="File Name.pdf"
Content-Transfer-Encoding: base64
base64EncodedStringHere-removedForThisPost
--__boundary__--
Run Code Online (Sandbox Code Playgroud)
注意:Gmail API上传附件文档指出,上传简单附件(5MB以下)时Content-Length
需要.我做了它,以便我的代码生成PDF附件的总字节数的整数值.但是,我注意到它Content-Length
没有包含在有效载荷中.
我尝试将multipart/alternative
邮件的内容类型更改为 …
我有一行设置单元格中的当前日期和时间:
sheet.getRange(1,1).setValue(new Date());
Run Code Online (Sandbox Code Playgroud)
然后我有一行根据该单元格的值创建格式化日期:
var addedDate = sheet.getRange(1,1).getValue();
var addedTime = Utilities.formatDate(addedDate, "GMT", "hh:mm a");
Run Code Online (Sandbox Code Playgroud)
结果addTime似乎在GMT时区,我需要它在用户的时区.它通常是美国东部时间(-0500),但如果我只是从那个时间减去5个小时,那么不考虑夏令时(-0400).
我在这里查看了formatDate的文档:https://developers.google.com/apps-script/reference/utilities/utilities#formatDate (Date,String,String )
这里链接到官方的Java SimpleDateFormat类文档:http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
...但我无法在那里找到有效时区列表来替换GMT.
使用 terraform v0.12.21 和 AWS provider v2.51.0,我试图从头开始创建一些基础设施(没有以前的 terraform 状态)。
目标是在单个 VPC 中拥有一些可公开访问的 EC2 实例,我认为这些是我需要完成的资源:
使用这个 terraform 配置:
locals {
office_cidr = ["x.x.x.x/32", "x.x.x.x/32"]
}
provider "aws" {
region = var.region
version = "~> 2.51"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
}
resource "aws_internet_gateway" "gw" {
vpc_id = aws_vpc.main.id
}
resource "aws_subnet" "main" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
}
resource "aws_route_table" …
Run Code Online (Sandbox Code Playgroud) 我有这个代码打开文件并使用replaceText替换字符串.
var url = 'http://www.test.com';
var doc = DocumentApp.openById(file.getId());
doc.replaceText("<<urlGoesHere>>", url);
doc.saveAndClose();
Run Code Online (Sandbox Code Playgroud)
当我打开文档时,替换已经发生,但是url不是可点击的超链接,它只是静态文本.有没有办法以编程方式使其成为可点击的链接?
我发现这种文本方法叫做setLinkUrl,但是没有文档/示例:https://developers.google.com/apps-script/reference/document/text#setLinkUrl(String )
有任何想法吗?
我有一个Google Apps脚本功能,用于在我们的Google Apps域中为新员工设置帐户.
它做的第一件事是调用Google Admin Settings API并检索currentNumberOfUsers和maximumNumberOfUsers,这样它就可以看到是否有可用的席位(否则使用Admin SDK Directory API创建用户的后续步骤将失败).
直到最近,当我们的域名必须从Postini迁移到Google Vault进行电子邮件归档时,它才能正常运行.
在迁移之前,使用管理SDK目录API创建Google Apps用户时,它会将 currentNumberOfUsers增加1,新用户帐户用户将自动访问所有Google Apps服务.
现在迁移后,在创建Google Apps用户时,他们不会自动分配"许可证",因此我修改了我的脚本以使用 Enterprise License Manager API,现在它分配了"Google-Apps-For-Business"
许可证.这很好.
但是,currentNumberOfUsers现在与分配的许可证数量不同,并且"Google-Apps-For-Business"
只是可用的几种不同类型许可证中的一种.
我可以通过运行以下命令获取当前分配的 "Google-Apps-For-Business"
许可证数量:
var currentXml = AdminLicenseManager.LicenseAssignments.listForProductAndSku('Google-Apps', 'Google-Apps-For-Business', 'domain.com', {maxResults: 1000});
var current = currentXml.items.toString().match(/\/sku\/Google-Apps-For-Business\/user\//g).length;
Run Code Online (Sandbox Code Playgroud)
但产生的数字与currentNumberOfUsers不同.
我现在真正需要做的就是获得最大数量的拥有"Google-Apps-For-Business"
许可证,以便新员工设置脚本可以确定是否有可用的许可证.
我查看了以下API的API参考文档,但是......
Enterprise License Manager API →没有获取最大或可用许可证数量的方法.
作为员工离开公司的"离职"流程的一部分,作为超级管理员,我们使用Google Apps管理员SDK目录API更改用户密码,以便他们无法再访问其帐户.然后我们登录进行Google导出,重置其他帐户的密码等.
但是,我们最近决定对所有用户实施两步验证.所以现在当我们登录他们的帐户时,它会向他们的手机发送一个代码.
由于SubOrg强制执行2步,因此我们甚至无法通过管理控制台将其关闭.所以我现在所能做的就是让API将用户移动到其中关闭2步强制设置的不同SubOrg,然后手动关闭2步.
有没有办法以编程方式关闭帐户的两步验证?
我查看了Google Apps管理SDK目录API用户:更新文档,但它似乎与2步没有任何关系.
该报告API可以找出用户的注册状态,但它的只读的报告目的.
我使用以下 Google Apps 脚本代码在脚本运行时在电子表格的自定义侧边栏中显示内容:
function test() {
var sidebarContent = '1<br>';
updateSidebar(sidebarContent);
sidebarContent += '2<br>';
updateSidebar(sidebarContent);
sidebarContent += '3';
updateSidebar(sidebarContent);
}
function updateSidebar(content) {
var html = HtmlService.createHtmlOutput(content)
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle('Sidebar')
.setWidth(250);
SpreadsheetApp.getUi().showSidebar(html);
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是每次该updateSidebar()
函数运行时,侧边栏都会在加载新内容时闪烁。
我该如何编程才能更有效地更新侧边栏的内容,从而消除闪烁?
我假设SpreadsheetApp.getUi().showSidebar(html);
实际上应该只在开始时运行一次,并且内容的后续更新应该由 .js 文件中的 Javascript 处理。
但我不知道如何sidebarContent
从用户浏览器中运行客户端的 JavaScript 代码获取变量。
另外,我知道这一定是可能的,因为我今天刚刚在 Google Apps 开发者博客上看到这篇关于使用自定义侧边栏的应用程序的帖子,并且文章末尾的 .gif 显示了一个正在更新的动画精美的侧边栏实时。
我正在尝试使用Trello API的新自定义字段方法来设置卡片上自定义字段的值。
我创建了一个类型为 的自定义字段number
。当我GET
通过 it's 发出自定义字段请求时id
,它返回此自定义字段对象:
{
"id":"5ab13cdb8acaabe576xxxxx",
"idModel":"54ccee71855b401132xxxxx",
"modelType":"board",
"fieldGroup":"837a643fd25acc835affc227xxxxxxxxxxxxxxxxxxxx",
"name":"Test Number Field",
"pos":16384,
"type":"number"
}
Run Code Online (Sandbox Code Playgroud)
然后,当我在 Trello UI 中创建一张新卡(但不要在框中输入值Test Number Field
),然后GET
使用该卡customFieldItems=true
(如此处所述)时,它会返回此卡对象(删除了不相关的字段):
{
"id": "5ab56e6b62abac194d9xxxxx",
"name": "test1",
"customFieldItems": []
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于我没有Test Number Field
在 UI 的框中输入任何内容,因此该customFieldItems
属性包含一个空数组。
然后,如果我再次在 UI 和卡的框中输入数字,它会返回以下内容(删除了不相关的字段1
):Test Number Field
GET
{
"id": "5ab56e6b62abac194d9xxxxx",
"name": "test1",
"customFieldItems":
[
{
"id": "5ab570c5b43ed17b2dxxxxx",
"value": {
"number": "1"
}, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用husky安装 git hooks 作为 Jenkins 管道作业的一部分。
我已将其添加到 Jenkins 作业中:
npm install husky --save-dev
Run Code Online (Sandbox Code Playgroud)
但是当作业运行时,我在 Jenkins 输出中看到了这一点:
> node-sass@4.14.1 install /home/jenkins/agent/workspace/<branch_name>/node_modules/node-sass
> node scripts/install.js
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/linux_musl-x64-72_binding.node
Download complete
Binary saved to /home/jenkins/agent/workspace/<branch_name>/node_modules/node-sass/vendor/linux_musl-x64-72/binding.node
Caching binary to /root/.npm/node-sass/4.14.1/linux_musl-x64-72_binding.node
> husky@4.3.0 install /home/jenkins/agent/workspace/<branch_name>/node_modules/husky
> node husky install
husky > Setting up git hooks
CI detected, skipping Git hooks installation.
husky > Done
Run Code Online (Sandbox Code Playgroud)
...并且.git/hooks/precommit
钩子文件永远不会创建。
故障排除研究笔记:
在husky v4 文档中,它说“默认情况下,Husky 不会安装在 CI 服务器上”。我找不到任何有关如何覆盖该默认行为的文档。
在搜索 repo 代码时,我什至无法在代码中 …
我已经阅读了 Admin ADK Directory API 文档中的所有相关页面以及 stackoverflow 上的几个问题,但我仍然陷入困境。
我是我的 Google Apps 域的超级管理员,我希望我的域中的用户能够创建自己的 Google 网上论坛。我制作了一个 Google 表单,用户可以在其中指定群组的名称和电子邮件。然后,Google 表单响应表有一个“表单提交时”触发器,它调用我的代码来创建组。
createGroupTest()
当我从脚本编辑器运行时,此代码有效。它会立即在我的 Google Apps 域中创建该组。
当“表单提交”触发器运行该函数时,此代码不起作用onFormSubmit(e)
。catch(e)
我收到了来自俗语的电子邮件Exception: Failed to authenticate for service: Groups
。
有谁知道是什么导致 oauth 身份验证在脚本编辑器中工作,但在 onFormSubmit 函数调用时却不起作用?
function onFormSubmitTest() {
var t = new Date();
t = t.getTime();
onFormSubmit([t, "AAA Test Group " + t], ["aaa.testgroup." + t + "@mydomain.com"], ["me@mydomain.com"]);
}
var consumerKey = "mydomain.com";
var consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
var domainName = "mydomain.com";
function …
Run Code Online (Sandbox Code Playgroud) google-apps google-apps-script oauth-2.0 google-admin-sdk google-directory-api
google-apps ×3
api ×2
google-api ×2
javascript ×2
amazon-ec2 ×1
attachment ×1
email ×1
git ×1
gmail ×1
gmail-api ×1
husky ×1
hyperlink ×1
jenkins ×1
oauth-2.0 ×1
object ×1
replace ×1
routing ×1
terraform ×1
text ×1
time ×1
timezone ×1
trello ×1
url ×1
vpc ×1