使用Spring-Boot + Heroku进行邮件发送

简述

使用Spring Boot和Heroku发送电子邮件。

做法 (Correct Method)

将使用Heroku的SendGrid附加功能来发送电子邮件。

事先准备

    • heroku CLIのインストール済

 

    • Spring BootのアプリケーションをHerokuにデプロイする

 

    Herokuのアカウントにクレジットカードを登録する(ここから登録)(addonが利用できるようになります)

过程

※她在Heroku上的应用程序名称是gosshys-testproject。

增加SendGrid的附加组件

请使用以下命令注册SendGrid的附加功能。请在已部署的Spring Boot应用程序的git存储库中执行该命令。

heroku addons:create sendgrid:starter

执行结果

$ heroku addons:create sendgrid:starter
Creating sendgrid:starter on ⬢ gosshys-testproject... free
Created sendgrid-convex-82110 as SENDGRID_PASSWORD, SENDGRID_USERNAME
Use heroku addons:docs sendgrid to view documentation

成功后,使用以下命令检查是否设置了SendGrid环境变量。将自动设置SendGrid用户(电子邮件地址)和密码。

$ heroku config:get SENDGRID_USERNAME
app99999999@heroku.com
$ heroku config:get SENDGRID_PASSWORD
xxxpasswdxxx
如果没有注册账户的信用卡信息,将无法进行追加操作。

请验证您的帐户以安装此附加计划,有一个错误。

$ heroku addons:create sendgrid:starter
Creating sendgrid:starter on ⬢ gosshys-testproject... !
 ▸    Please verify your account to install this add-on plan (please enter a credit card) For more information, see https://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify

获取SendGrid的API密钥

根据SendGrid文档中的“获取API密钥”部分,获取SendGrid的API密钥。

image.png

点击这里,将转到获取SendGrid API密钥的页面。

在最初访问时,会弹出登录页面,请在此处输入之前通过heroku config:get获取的SendGrid的用户名和密码。

image.png

登录后会出现这样的界面。

image.png

当你点击画面右上角的”创建API密钥”按钮,会出现API密钥生成的界面。

image.png
    • 「API Key Name」にAPIキーの説明を入れます。ここは単純にHerokuのアプリケーション名を入れました。

 

    「API Key Permissions」は、「Full Access」と「Restricted Access」のどちらかを選択します。「Billing Access」は、主にエンタープライズ向けのようなので選択しません。また「Restricted Access」は細かくメールの機能を制限できますが、今はどの機能を制限すべきか定かでないので「Full Access」を選択します。

点击「创建并查看」按钮以生成 API 密钥。

生成API密钥

点击「创建和查看」按钮后,以下画面将显示出来。出于安全考虑,该画面只会显示一次,因此请将出现在红字下方的英数字列表复制并记下来。

image.png

复制并记录下API密钥后,点击“完成”按钮。然后将会跳转到API密钥列表页面,在那里可以参考“API Key ID”和被掩码处理的“API KEY”。

image.png

在Heroku环境变量中设置SendGrid的API密钥ID和API密钥。

按照Heroku环境变量中的”Setup API key environment variable”文件中的步骤,设置SendGrid的API密钥ID和API密钥。

$ heroku config:set SENDGRID_API_KEY=(SendGridのページでメモしたAPIキー、APIキーIDではないので注意)
Setting SENDGRID_API_KEY and restarting ⬢ gosshys-testproject... done, v7
SENDGRID_API_KEY: (SendGridのページでメモしたAPIキーが表示されます)

使用Spring Boot应用程序发送电子邮件。

参照了Java的文件后,我们将向Spring Boot添加电子邮件发送程序。

将 SendGrid 库添加到 pom 文件中。

在maven的pom.xml文件的dependencies中添加以下内容。根据目前的情况,4.1.2似乎是最新的版本,因此我已经添加了它。至于Gradle方面,请参考文档中的示例。

        <dependency>
            <groupId>com.sendgrid</groupId>
            <artifactId>sendgrid-java</artifactId>
            <version>4.1.2</version>
        </dependency>

在Spring Boot的控制器中添加邮件发送功能

在Spring Boot的RestController中,将文档中的示例直接粘贴。虽然示例使用Kotlin编写,但Java也可以。

package com.koiwaimilk.tsukigaoka.core.controller

import com.sendgrid.*
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import java.io.IOException


@RestController
@RequestMapping(value = "/mail")
class MailSendController {
    @RequestMapping(value = "/send")
    fun send(@RequestParam(value = "contents", defaultValue = "Hello, Email!") contents: String): String {
        val from = Email("test@example.com")
        val subject = "Hello World from the SendGrid Java Library!"
        val to = Email("(ここに送信先のメールアドレスを設定します)")
        val content = Content("text/plain", "Hello, Email!")
        val mail = Mail(from, subject, to, content)

        val sg = SendGrid(System.getenv("SENDGRID_API_KEY"))
        val request = Request()
        try {
            request.method = Method.POST
            request.endpoint = "mail/send"
            request.body = mail.build()
            val response = sg.api(request)
            System.out.println(response.statusCode)
            System.out.println(response.body)
            System.out.println(response.headers)
        } catch (ex: IOException) {
            throw ex
        }

        return "OK"
    }
}

设置本地环境的环境变量。

如果在本地运行,需要设置SENDGRID_API_KEY,因此在IDE的应用程序启动时,将SENDGRID_API_KEY设置为环境变量。下面是IntelliJ的一个示例。

image.png

Spring Boot的启动和邮件发送

我要启动Spring Boot。

使用`curl`来调用邮件发送控制器。

$ curl localhost:8080/mail/send

数分钟之后

当我检查邮箱时,发现有封邮件到达。

image.png
广告
将在 10 秒后关闭
bannerAds