我尝试了下面的代码创建带有大附件的电子邮件多:如何使用Gmail客户端API带有大附件的邮件在Android
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的文件时,执行函数挂起并且不返回(我期望出现错误或至少超时,但这是另一个问题)
经过一些搜索后,我发现我需要以某种方式做upload
请求(see here),以下API中的Gmail 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 client API
和“上传”附件?
你阅读本:https://developers.google.com/gmail/api/v1/reference/users/messages /发送 – pratz9999
@ pratz9999是的,我做过了,但是这是指http请求,而我正在询问应该简化API使用的客户端API。 – SagiLow
https://github.com/steveholt55/JavaMail-API-Android 它可能会更有帮助 – pratz9999