-
구글 Gmail 연동 - 메일 작성 및 보내기공부 2023. 8. 11. 21:06728x90메시지 만들기
Gmail API를 사용하기 위해는 base64url 문자열로 인코딩된 MIME 이메일 메시지가 필요하다.
public static MimeMessage createEmail(String toEmailAddress, //메일 받는 사람 String fromEmailAddress, //매일 보내는 사람 String subject, //메일 제목 String bodyText) //메일 내용 throws MessagingException { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); MimeMessage email = new MimeMessage(session); email.setFrom(new InternetAddress(fromEmailAddress)); email.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(toEmailAddress)); email.setSubject(subject); email.setText(bodyText); return email; }
만든 MimeMessage를 인코딩 후, Message 객체를 인스턴스화한 후, base64url로 인코딩된 문자열을 raw 속성값으로 설정한다.
public static Message createMessageWithEmail(MimeMessage emailContent) throws MessagingException, IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); emailContent.writeTo(buffer); byte[] bytes = buffer.toByteArray(); String encodedEmail = Base64.encodeBase64URLSafeString(bytes); Message message = new Message(); message.setRaw(encodedEmail); return message; }
초안 만들기
위에서 만들어진 메시지를 가지고 초안을 보낸다.
초안은 Draft 시스템 라벨이 적용된 전송되지 않은 메시지다.
초안이 전송된 후 초안은 자동으로 삭제되고 SENT 시스템 라벨을 사용하여 업데이트된 ID가 포함된 새 메시지가 생성된다.public Draft createDraftMessage(String fromEmailAddress, String toEmailAddress, String subject, String bodyText) throws MessagingException, IOException, GeneralSecurityException { final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Gmail service = new Gmail.Builder(HTTP_TRANSPORT,JSON_FACTORY,getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); MimeMessage mimeMessage = createEmail(fromEmailAddress,toEmailAddress,subject,bodyText); Message message = createMessageWithEmail(mimeMessage); try { // Create the draft message Draft draft = new Draft(); draft.setMessage(message); draft = service.users().drafts().create("me", draft).execute(); System.out.println("Draft id: " + draft.getId()); System.out.println(draft.toPrettyString()); return draft; } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately GoogleJsonError error = e.getDetails(); if (error.getCode() == 403) { System.err.println("Unable to create draft: " + e.getMessage()); } else { throw e; } } return null; }
이메일 보내기
위에서 만든 메시지를 가지고 이메일을 보낸다.
이메일을 보내는 방법은 message.send 메서드를 이용하여 바로 전송하거나, draft.send 메서드를 사용하여 초안에서 전송 가능하다.public static Message sendEmail(String fromEmailAddress, String toEmailAddress, String subject, String bodyText) throws MessagingException, IOException, GeneralSecurityException { final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Gmail service = new Gmail.Builder(HTTP_TRANSPORT,JSON_FACTORY,getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); MimeMessage mimeMessage=createEmail(fromEmailAddress,toEmailAddress,subject,bodyText); try { // Create send message message = service.users().messages().send("me", message).execute(); System.out.println("Message id: " + message.getId()); System.out.println(message.toPrettyString()); return message; } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately GoogleJsonError error = e.getDetails(); if (error.getCode() == 403) { System.err.println("Unable to send message: " + e.getDetails()); } else { throw e; } } return null; }
코드: 깃허브
출처: 구글 Gmail API728x90반응형'공부' 카테고리의 다른 글
mysql (0) 2023.08.27 nvm 설치 (0) 2023.08.11 구글 gmail API 연동 - 라벨 (0) 2023.08.09 구글 Workspace API 사용법 (0) 2023.08.07 깃 (0) 2023.08.02