diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services/rest/SendGridMailService.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/services/rest/SendGridMailService.scala | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/SendGridMailService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/SendGridMailService.scala new file mode 100644 index 0000000..37dc758 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/SendGridMailService.scala @@ -0,0 +1,45 @@ +package xyz.driver.pdsuidomain.services.rest + +import com.sendgrid._ +import xyz.driver.pdsuicommon.logging._ +import xyz.driver.pdsuidomain.services.MailService +import xyz.driver.pdsuidomain.services.MailService.Template +import xyz.driver.pdsuidomain.services.rest.SendGridMailService._ + +import scala.util.control.NonFatal + +object SendGridMailService { + + private val ExpectedHttpCode = 202 + + case class Settings(provider: String, frontEndUrl: String, apiKey: String, from: String) +} + +class SendGridMailService(settings: Settings) extends MailService with PhiLogging { + + def sendTo(email: String, template: Template): Boolean = { + val to = new Email(email) + val content = new Content(template.contentType, template.content) + val mail = new Mail(new Email(settings.from), template.subject, to, content) + + val request = new Request() + val sendGrid = new SendGrid(settings.apiKey) + + try { + request.method = Method.POST + request.endpoint = "mail/send" + request.body = mail.build() + val response = sendGrid.api(request) + if (response.statusCode != ExpectedHttpCode) { + logger.error(phi"Unexpected response: ${Unsafe(response.statusCode)}, ${Unsafe(response.body.take(100))}") + } + + response.statusCode == ExpectedHttpCode + } + catch { + case NonFatal(e) => + logger.error(phi"Can not send an email: $e") + false + } + } +} |