Рубрики
Без рубрики

Отправляйте почту легко! весенняя загрузка, sendgrid и greenmail

Это краткая презентация по использованию api поставщика услуг электронной почты sendgrid. * * * Клонируйте репозиторий github… Помеченный микросервисами, java, почтой, sendgrid.

Это краткая презентация по использованию 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”