Created
October 8, 2019 10:29
-
-
Save anta40/3f9c8da64023b375dc778bc750b4da07 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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