Это краткая презентация по использованию api поставщика услуг электронной почты sendgrid. * * Клонируйте репозиторий github, чтобы получить более подробную информацию! * * * Я использую этот api через java-клиент sendgrid и внутри микросервиса, созданного с помощью springboot, и, как и весь хороший код, это проверенный код, давайте используем библиотеку greenmail для имитации smtp-сервера для получения электронных писем.
Прежде всего, вам нужно создать учетную запись в Sendgrid и включите ключ api для использования в клиенте.
Есть несколько способов использовать этот sdk sendgrid, и в этом случае будет подходить отправка электронной почты, которая будет передаваться по http-соединению в формате json. Есть еще один способ отправить электронное письмо, который заключался бы в регистрации шаблона в административной панели сайта sendgrid и отправке его через клиент с ключом зарегистрированного шаблона. Для выполнения любого вызова sendgrid необходимо отправить ключ, который доступен в админке sendgrid .
Для вызова api sendgrid необходимо создать объект запроса, как показано ниже.
public class RequestSendGridBuilder { private static final String MIME_TYPE_HTML = "text/html"; private static final String ENDPOINT_MAIL_SEND = "mail/send"; private Mail mail = new Mail(); private Content content = new Content(); public static RequestSendGridBuilder of() { return new RequestSendGridBuilder(); } public RequestSendGridBuilder from(String from) { mail.setFrom(new Email(from)); return this; } public RequestSendGridBuilder key(String key) { mail.addCustomArg("customerAccountNumber", key); return this; } public RequestSendGridBuilder content(String template) { content.setType(MIME_TYPE_HTML); content.setValue(template); return this; } public RequestSendGridBuilder subject(String subject) { mail.setSubject(subject); return this; } public RequestSendGridBuilder to(String to) { Personalization personalization = new Personalization(); personalization.addTo(new Email(to)); mail.addPersonalization(personalization); return this; } public Request build() throws IOException { mail.addContent(content); Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint(ENDPOINT_MAIL_SEND); request.setBody(mail.build()); return request; } }
и после этого позвоните в службу:
@Override public EmailResponseDTO send(EmailRequestDTO request) throws EmailConnectionException { try { Request sendGridRequest = RequestSendGridBuilder.of() .content(request.getContent()) .subject(request.getSubject()) .to(request.getTo()) .from(request.getFrom()) .key(sendGridKey) .build(); Response sendGridResponse = sendGrid.api(sendGridRequest); return getResponse(sendGridResponse, sendGridRequest); } catch (IOException e) { throw new EmailConnectionException(e); } }
Да, это очень просто! но не забудьте установить sendgrid API_KEY, иначе он не будет работать.
Можно использовать свой собственный движок шаблонов, если вы отправляете json с вашим html-контентом. В этом случае у вас будет свой шаблон (например, html) в вашем проекте, и для его обновления необходимо новое развертывание.
Если вы не хотите передавать трафик большого размера в байтах по сети из-за очень большого электронного письма, можно, как было сказано ранее, записать свой шаблон в панель административных шаблонов , после создания шаблона будет сгенерирован ключ для его идентификации, и этот ключ будет отправлен клиентом в сервис, поэтому вам не придется передавать все содержимое электронного письма. Кроме того, вы сможете обновлять свой шаблон во время выполнения непосредственно на сайте https://sendgrid.com
mail.setTemplateId(templateId); Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint(ENDPOINT_MAIL_SEND); request.setBody(mail.build()); Response sendGridResponse = sendGrid.api(request);
В этом примере я использовал mustache для преобразования параметров синтаксического анализа в шаблон. Это очень простая в использовании и очень эффективная библиотека. Чтобы изменить значения переменных шаблона, просто передайте отображение строк в движок mustache, как показано ниже:
public class TemplateService { private MustacheAutoConfiguration mustacheAutoConfiguration; public TemplateService(MustacheAutoConfiguration mustacheAutoConfiguration) { this.mustacheAutoConfiguration = mustacheAutoConfiguration; } public @NonNull String parseTemplateParams(EmailRequestDTO email) throws TemplateException { try { MustacheResourceTemplateLoader templateLoader = mustacheAutoConfiguration.mustacheTemplateLoader(); Reader template = templateLoader.getTemplate(email.getTemplateName()); return mustacheAutoConfiguration.mustacheCompiler(templateLoader) .compile(template) .execute(email.getTemplateParams()); } catch (FileNotFoundException e) { throw new TemplateException("TEMPLATE_NOT_FOUND"); } catch (MustacheException e) { throw new TemplateException("TEMPLATE_PARSE_ERROR", e); } catch (Exception e) { throw new TemplateException("GENERIC_ERROR", e); } } }
Для создания тестов интеграции электронной почты я использую библиотеку greenmail. Эта библиотека позволяет вам создать поддельный smtp-сервер, который будет получать электронные письма, отправленные клиентом, поэтому можно гарантировать лучшую приемлемость и эффективность вашей реализации.
public static GreenMail getGreenMail() { if (greenMail == null) { ServerSetup serverSetup = new ServerSetup( SocketUtils.findAvailableTcpPort( INIT_RANGE_EMAIL_PORT, END_RANGE_EMAIL_PORT), ServerSetup.getLocalHostAddress(), ServerSetup.PROTOCOL_SMTP); greenMail = new GreenMail(serverSetup); greenMail.setUser( EMAIL_USER_ADDRESS, USER_NAME, USER_PASSWORD); greenMail.start(); } return greenMail; }
Чтобы увидеть, как работает клиент, вы можете использовать полный код здесь НАСЛАЖДАЙТЕСЬ!!!
Рекомендации
http://www.icegreen.com/greenmail/ http://www.icegreen.com/greenmail/
Оригинал: “https://dev.to/georgeoikawa/send-mail-easily-springboot-sendgrid-and-greenmail-9g”