gpt4 book ai didi

android - 如何在 Android 上使用 gmail 客户端 API 发送带有大附件的电子邮件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:34 25 4
gpt4 key购买 nike

我已尝试使用以下代码来创建包含大附件的多部分电子邮件:

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

MimeBodyPart mimeBodyText = new MimeBodyPart();
mimeBodyText.setHeader("Content-Type", "text/html; charset=\"UTF-8\"");
mimeBodyText.setContent(body, "text/html");

Multipart mp = new MimeMultipart();
mp.addBodyPart(mimeBodyText);

if (attachments != null && attachments.size() > 0) {
for (Uri uri : attachments) {
MimeBodyPart mimeBodyAttachment = new MimeBodyPart();
String fileName = UriUtils.getFileName(uri, context);
String mimeType = UriUtils.getMimeType(uri, context);
Log.d(TAG, "Generating file info, uri=" + uri.getPath() + ", mimeType=" + mimeType);
FileInputStream is = UriUtils.generateFileInfo(context, uri, mimeType);
if (is == null) {
throw new MessagingException("Failed to get file for uri=" + uri.getPath());
}
try
{
mimeBodyAttachment.setFileName(fileName);
mimeBodyAttachment.setHeader("Content-Type", mimeType + "; name=\"" + fileName + "\"");
DataSource source = new ByteArrayDataSource(is, mimeType);
mimeBodyAttachment.setDataHandler(new DataHandler(source));
mimeBodyAttachment.setHeader("Content-Transfer-Encoding", "base64");
mimeBodyAttachment.setDisposition(MimeBodyPart.ATTACHMENT);
mp.addBodyPart(mimeBodyAttachment);
} catch (IOException e) {
throw new MessagingException(e.getMessage());
}
}
}

MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(from));
mimeMessage.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(recipient));
mimeMessage.setSubject(subject);
mimeMessage.setContent(mp);

Message message = createMessageWithEmail(mimeMessage);

service.users().messages().send(from, message).execute();

这与 this guide 中的内容非常相似,但是,当我尝试添加一个大于 ~5mb 的文件时,执行函数挂起并且不返回(我预计会出现错误或至少超时,但这是另一个问题)

经过一些搜索,我发现我需要以某种方式执行上传请求(see here),Gmail API 中的以下 API 看起来是正确的:

Send send(java.lang.String userId, com.google.api.services.gmail.model.Message content, com.google.api.client.http.AbstractInputStreamContent mediaContent)

很遗憾,我找不到任何关于其用法的文档或说明。
当我尝试将附件原始作为 mediaContent 时,我收到一条错误消息,指出唯一支持的 mime 类型是 message/rfc822,因此我尝试使用 MimeBodyPart 我正在上面的 for 循环中创建并使用它,但看起来附件只是被忽略了。

应该如何使用 Gmail 客户端 API 和“上传”附件?

最佳答案

我知道这个问题已经有几个月了,但在遇到同样的问题后,我终于弄明白了。

我的实现和你的非常相似,我只改变了最后两行。

所以不要使用:

Message message = createMessageWithEmail(mimeMessage);

service.users().messages().send(from, message).execute();

使用:

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
mimeMessage.writeTo(bytes);

ByteArrayContent content = new ByteArrayContent("message/rfc822", bytes.toByteArray());
service.users().messages().send(from, null, content).execute();

关于android - 如何在 Android 上使用 gmail 客户端 API 发送带有大附件的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35373858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com