我有问题MailApp.sendEmail()。我尝试通过 Google 电子表格中的脚本发送电子邮件。我的脚本适用于我的帐户,但不适用于我朋友的帐户。我收到这条消息:
消息被拒绝。有关详细信息,请参阅https://support.google.com/mail/answer/69585。最终收件人:rfc822;xx@xx.xx 操作:失败状态:5.0.0 诊断代码:smtp;消息被拒绝。有关详细信息,请参阅https://support.google.com/mail/answer/69585。上次尝试日期:2018 年 3 月 21 日星期三 05:41:31 -0700 (PDT)
我使用了 Martin Hawksey 教程脚本(经过一些修改):
var TO_ADDRESS = "xxx@gmail.com";
// spit out all the keys/values from the form in HTML for email
function formatHtmlMailBody(obj, order) {
var result = "html text";
// loop over all keys in the ordered form data
for (var idx in order) {
var key = order[idx];
result += key + " " + obj[key];
}
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建此示例:
https://github.com/GoogleDeveloperExperts/chrome-extension-google-apis。
我的客户 ID 有问题。我已经将 Gmail API 服务添加到我的客户端 ID。此外,当我使用示例的客户端 ID 时,一切正常,但是当我使用客户端 ID 时,出现此错误:
OAuth2 请求失败:服务响应错误:“错误的客户端 ID:APP_ID_OR_ORIGIN_NOT_MATCH”。
有人知道出了什么问题吗?
[编辑] 我现在已经在我的 linux 发行版上尝试了 Python 快速入门指南,它按预期工作,这让我相信这只是 Windows 的问题。[end_edit]
遵循此处找到的 Python 快速入门指南:https : //developers.google.com/gmail/api/quickstart/python
我遇到的问题是在使用 Python 时,在
service = build('gmail','v1', http=creds.authorize(Http()))
Run Code Online (Sandbox Code Playgroud)
下一行,是这样的:
results = service.users().labels().list(userID='me').execute()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Instance of 'Resource' has no 'users' member
Run Code Online (Sandbox Code Playgroud)
现在我已经尝试了 .NET 快速入门指南并且有效。出于某种原因,API 不适用于 python。
我的 google-api-python-client pip 安装说它是最新的。
我使用 googleapiclient 而不是 apiclient 因为从我读过的内容来看,apiclient 只是出于遗留原因而存在,在此代码中使用它会导致错误“无法从 apiclient 导入构建”。
这是我的pipfreeze
快速入门代码:
"""
Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from …Run Code Online (Sandbox Code Playgroud) python google-api google-oauth google-api-python-client gmail-api
我正在使用官方 Google 教程连接到 Gmail 地址并使用Gmail API从电子邮件下载附件。
给出的示例代码是这样的:
try:
message = service.users().messages().get(userId=user_id, id=msg_id).execute()
for part in message['payload']['parts']:
if part['filename']:
file_data = base64.urlsafe_b64decode(part['body']['data']
.encode('UTF-8'))
path = ''.join([store_dir, part['filename']])
f = open(path, 'w')
f.write(file_data)
f.close()
except errors.HttpError, error:
print 'An error occurred: %s' % error
Run Code Online (Sandbox Code Playgroud)
我系统地得到一个KeyError:'数据'。
当我打印“零件”对象时,我得到了这个。我检查了所有电子邮件都包含附件,我看到“正文”键有“attachmentId”和“size”字段,但没有“数据”字段。
{'partId': '1',
'mimeType': 'application/x-zip-compressed',
'filename': 'Statement.zip',
'headers': [{'name': 'Content-Type', 'value': 'application/x-zip-compressed; name="Statement.zip"'},
{'name': 'Content-Description', 'value': 'Statement.zip'},
{'name': 'Content-Disposition', 'value': 'attachment; filename="Statement.zip"; size=317; creation-date="Fri, 05 Oct 2018 11:00:24 GMT"; modification-date="Fri, 05 Oct 2018 …Run Code Online (Sandbox Code Playgroud) 我们正在通过亚马逊 ses 发送 html 电子邮件。看来 gmail 正在更改 href 标签并使其无法使用。它几乎看起来像是在那里放置跟踪信息而不是原始链接。以下是我们发送给 ses 的内容以及我们在客户电子邮件中看到的内容。电子邮件中的所有 href 标签都会发生这种情况,但并非所有发送到 gmail 的电子邮件都会发生这种情况。
发送到 ses:
<a ses:no-track href="http://www.Google.com">www.Google.com</a>
客户邮箱:
<a href="http://esfsecev-ty3014" rel="noreferrer" target="_blank" data-saferedirecturl="https://www.google.com/url?q=http://esfsecev-ty3014&source=gmail&ust=1541799752348000&usg=AFQjCNHRj6rzLaQFMfQQPtoDE_Q9RTTFQQ">
www.GoSurvey.com</a>
提前致谢!
我一整天都在试图解决这个问题,但我找不到错误在哪里。我正在制作一个程序来检测我何时在我的 gmail 中收到邮件并在 Google 电子表格中写入该邮件,我正在使用 Gmail API 和 Google Apps 脚本。这是我的代码:
gs代码是:
function doPost(e) {
var message = JSON.parse(e.postData.getDataAsString()).message
var data = Utilities.newBlob(Utilies.base64Decode(message.data)).getDataAsString()[0];
var ss = SpreadsheetApp.openById('1b8s5PLItCsmk8l1q0T1KHYOzjW7iDv4sRXSFvAxVFbQ').getSheets()[0];
ss.appendRow([new Date(), message.message_id,data]);
return 200;
}
function capturemail(){
var WatchRes = Gmail.newWatchRequest();
WatchRes.labelIds = ["INBOX"];
//WatchRes.labelFilterAction = "include";
WatchRes.topicName = "projects/proyecgmailyou/topics/mailsuc";
var response = Gmail.Users.watch(WatchRes,"rjdelrio@uc.cl");
Logger.log(response);
}
Run Code Online (Sandbox Code Playgroud)
函数 doPost() 我放在一个网络中:https : //script.google.com/a/uc.cl/macros/s/AKfycby8gOrWrMDkaAlgNdXNHl2J424Hvv0yu2CKKhJQW41Ka3Xa55g/exec
然后我尝试运行功能 capturemail 但出现下一个错误:
The API call to gmail.users.watch failed with the error: Invalid topicName does not match projects/sys-72285619869091378116913905/topics/*
Run Code Online (Sandbox Code Playgroud)
很奇怪,因为我从不使用这个名字“sys-72285619869091378116913905”而且我没有在同一个地方看到它
我也允许 …
watch google-apps-script google-cloud-platform gmail-api google-cloud-pubsub
我正在尝试按照Java Quickstart 中的步骤启用Gmail API。当我点击Google 开发者控制台中的按钮时,没有显示“下载客户端配置”之类的选项。"Enable the Gmail API"
所以,我无法获得 credentials.json 文件。
我正在 Spring Boot 中通过 smtp.gmail 发送电子邮件。
电子邮件配置文件
@Configuration
public class EmailConfig
{
@Bean
public JavaMailSender getJavaMailSender()
{
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(25);
mailSender.setUsername("abc@gmail.com");
mailSender.setPassword("123");
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.debug", "true");
return mailSender;
}
@Bean
public SimpleMailMessage emailTemplate()
{
SimpleMailMessage message = new SimpleMailMessage();
message.setTo("abc@gmail.com");
message.setFrom("johndoe@gmail.com");
message.setText("FATAL - Application crash. Save your job !!");
return message;
}
}
Run Code Online (Sandbox Code Playgroud)
发送电子邮件服务.java
@Service("emailService")
public class SendEmailService {
@Autowired
JavaMailSender mailSender;
@Autowired
private SimpleMailMessage preConfiguredMessage;
public void …Run Code Online (Sandbox Code Playgroud) 我们的应用程序使用管理员为整个域授权的服务帐户。使用此服务帐户,我们的应用程序使用 GetMessage 等 Gmail API 访问域用户的电子邮件。
突然间,从本周开始,我们开始间歇性地收到错误
Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user' of service 'gmail.googleapis.com' for consumer 'project_number:XYZ
Run Code Online (Sandbox Code Playgroud)
我们的应用程序或访问电子邮件的频率没有变化。我们在使用 API 时使用 10 的批量大小。
GCP 仪表板中的“配额超出错误计数(10 秒)- 每分钟查询数”图表为空。所以我们真的不确定发生了什么以及为什么我们突然达到配额限制。
此外,我不确定当我的应用程序使用服务帐户访问用户邮箱时如何应用“每用户”限制。围绕这个的文档是模糊的,至少对我来说是这样。
这些错误确实影响了我们为客户服务的能力。此外,不知道为什么会出现这些错误正在动摇我们对 Gmail API 的信心。
高度赞赏这方面的任何帮助。
谢谢
更新:今天我们看到很多
"User-rate limit exceeded. Retry after <timestamp>"
Run Code Online (Sandbox Code Playgroud)
错误。似乎这一次我们达到了除“每分钟查询数”之外的一些配额限制。当我查看我的客户端实施并找出发生这种情况的原因时,请随时分享您可能有的任何建议。
谢谢。
我正在使用Gmail api,许多用户抱怨发送电子邮件不起作用。对于大多数用户来说,它工作正常,我无法重现该问题。在 Firebase 中,我收到以下崩溃报告。
Non-fatal Exception: com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException
at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:297)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.dummydomain.myapp.EmailUtils.sendMessage(EmailUtils.java:397)
(...)
Caused by com.google.android.gms.auth.d: NeedPermission
at com.google.android.gms.auth.zze.zzb(zze.java:13)
at com.google.android.gms.auth.zzd.zza(zzd.java:77)
at com.google.android.gms.auth.zzd.zzb(zzd.java:20)
at com.google.android.gms.auth.zzd.getToken(zzd.java:7)
at com.google.android.gms.auth.zzd.getToken(zzd.java:5)
at com.google.android.gms.auth.zzd.getToken(zzd.java:2)
at com.google.android.gms.auth.GoogleAuthUtil.getToken(GoogleAuthUtil.java:55)
at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:267)
at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:292)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.dummydomain.myapp.EmailUtils.sendMessage(EmailUtils.java:397)
(...)
Run Code Online (Sandbox Code Playgroud)
以下是我的身份验证过程的要点。此时已授予 Manifest.permission.GET_ACCOUNTS,并且 Google Cloud Console 中的相应 API 内容已正确配置,并且我的应用已通过使用敏感权限/范围 GMAIL_SEND 的验证。
private void authenticate() {
String[] SCOPES = {GmailScopes.GMAIL_SEND};
GoogleAccountCredential mCredential = GoogleAccountCredential.usingOAuth2(
context,
Arrays.asList(SCOPES)) …Run Code Online (Sandbox Code Playgroud) gmail-api ×10
email ×2
google-api ×2
java ×2
python ×2
amazon-ses ×1
android ×1
google-oauth ×1
html-email ×1
smtp ×1
spring-boot ×1
watch ×1