Skip to content

Instantly share code, notes, and snippets.

@anta40
Created October 8, 2019 10:29
Show Gist options
  • Save anta40/3f9c8da64023b375dc778bc750b4da07 to your computer and use it in GitHub Desktop.
Save anta40/3f9c8da64023b375dc778bc750b4da07 to your computer and use it in GitHub Desktop.
package manhattan.email.bot.google;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.Base64;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.model.ListMessagesResponse;
import com.google.api.services.gmail.model.Message;
import com.google.api.services.gmail.model.MessagePart;
import com.google.api.services.gmail.model.MessagePartHeader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.commons.codec.binary.StringUtils;
/**
*
* @author OCIN
*/
public class GmailServiceImpl implements GmailService {
private static final String APPLICATION_NAME = "mail-bot";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private final HttpTransport httpTransport;
private GmailCredentials gmailCredentials;
public GmailServiceImpl(HttpTransport transport){
this.httpTransport = transport;
}
private Gmail createGmail() {
Credential credential = authorize();
return new Gmail.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
}
private Credential authorize() {
return new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(gmailCredentials.getClientId(), gmailCredentials.getClientSecret())
.build()
.setAccessToken(gmailCredentials.getAccessToken())
.setRefreshToken(gmailCredentials.getRefreshToken());
}
@Override
public void setGmailCredentials(GmailCredentials credentials) {
this.gmailCredentials = credentials;
}
private MimeMessage createEmail(String to, String from, String subject, String bodyText) throws MessagingException {
MimeMessage email = new MimeMessage(Session.getDefaultInstance(new Properties(), null));
email.setFrom(new InternetAddress(from));
email.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(to));
email.setSubject(subject);
email.setText(bodyText);
return email;
}
private Message createMessageWithEmail(MimeMessage emailContent) throws MessagingException, IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
emailContent.writeTo(buffer);
return new Message().setRaw(Base64.encodeBase64URLSafeString(buffer.toByteArray()));
}
@Override
public boolean sendMessage(String recipientAddress, String subject, String body) throws MessagingException, IOException {
Message message = createMessageWithEmail(
createEmail(recipientAddress, gmailCredentials.getUserEmail(), subject, body));
return createGmail().users()
.messages()
.send(gmailCredentials.getUserEmail(), message)
.execute()
.getLabelIds().contains("SENT");
}
public List<Message> listMessagesMatchingQuery(String userId, String query) throws IOException {
ListMessagesResponse response = createGmail().users().messages().list(userId).setQ(query).execute();
List<Message> messages = new ArrayList<Message>();
while (response.getMessages() != null) {
messages.addAll(response.getMessages());
if (response.getNextPageToken() != null) {
String pageToken = response.getNextPageToken();
response = createGmail().users().messages().list(userId).setQ(query).setPageToken(pageToken).execute();
}
else {
break;
}
}
// for (Message message : messages) {
// System.out.println(message.toPrettyString());
// }
return messages;
}
public String getMessageContent(String id){
String result = "";
try {
//Message msg = createGmail().users().messages().get("me", id).setFormat("full").execute();
Message msg = createGmail().users().messages().get("[email protected]", id).setFormat("full").execute();
result = StringUtils.newStringUtf8(Base64.decodeBase64(msg.getPayload().getParts().get(0).getBody().getData()));
}
catch (IOException ioe){
result = "";
}
return result;
}
public void getMessage2(String id) throws IOException{
Message msg = createGmail().users().messages().get("[email protected]", id).setFormat("full").execute();
for (MessagePartHeader header : msg.getPayload().getHeaders()) {
if (header.getName().contains("Date") || header.getName().contains("From") || header.getName().contains("To") || header.getName().contains("Subject"))
System.out.println(header.getName() + ":" + header.getValue());
}
// Displaying Message Body as a Plain Text
for (MessagePart msgPart : msg.getPayload().getParts()) {
if (msgPart.getMimeType().contains("text/plain"))
System.out.println(new String(Base64.decodeBase64(msgPart.getBody().getData())));
}
byte[] bodyBytes = Base64.decodeBase64(msg.getPayload().getParts().get(0).getBody().getData().trim().toString()); // get body
String body = new String(bodyBytes, "UTF-8");
System.out.println("---> body: "+body);
}
public Message getMessage(String userId, String messageId) throws IOException {
Message message = createGmail().users().messages().get(userId, messageId).execute();
System.out.println("Message snippet: " + message.getSnippet());
return message;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment