Próbowałem poniższy kod, żeby stworzyć wieloczęściowy e-mail z dużymi załącznikami:Jak wysłać e-maili z dużymi załącznikami za pomocą interfejsu API klienta Gmail na Androida
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();
co jest dość podobny do tego, co jest przedstawione w this guide jednak , gdy próbuję dodać plik większy niż ~ 5mb, funkcja execute zawiesza się i nie zwraca (spodziewam się błędu lub przynajmniej limitu czasu, ale jest to inny problem)
Po pewnym wyszukiwaniu znalazłem, że muszę jakoś wykonać upload
wniosek (see here), następujące API w Gmail API
wygląda dobrze:
Send send(java.lang.String userId, com.google.api.services.gmail.model.Message content, com.google.api.client.http.AbstractInputStreamContent mediaContent)
Niestety nie mogłem znaleźć żadnego dokumentu ani instrukcji na temat jego użycia.
Kiedy próbowałem umieścić załącznik jako surowy mediaContent
, otrzymałem komunikat, że jedynym obsługiwanym typem mime jest message/rfc822
, więc próbowałem wziąć MimeBodyPart
, który tworzę w powyższej pętli for
i używać go, ale wygląda na to, załącznik jest po prostu ignorowany.
Jak korzystać z załączników Gmail client API
i "przesyłania"?
Czytałaś to: https://developers.google.com/gmail/api/v1/reference/users/messages/wyślij – pratz9999
@ pratz9999 tak, ale to odnosi się do żądania http, gdy pytam o API klienta, które powinno ułatwić korzystanie z API. – SagiLow
https://github.com/steveholt55/JavaMail-API-Android może to będzie bardziej pomocne – pratz9999