[GO] Essayez d'envoyer un e-mail avec la bibliothèque cliente de l'API Gmail pour Java

Je suis censé utiliser l'API G Suite au travail, mais je ne trouve pas beaucoup de matériel, alors j'ai essayé de l'utiliser pour le moment.

Cette fois, le cadre d'application est Spring Boot. Essayer d'utiliser OAuth avec une application de bureau peut être un problème.

Préparation

J'omettrai l'enregistrement dans la console API, l'acquisition de l'ID client OAuth et la configuration de l'URI de redirection car il existe de nombreux documents antérieurs.

Activez Gmail sur l'écran Bibliothèque de la console API. Ajoutez ensuite la bibliothèque cliente API à votre projet. Étant donné que la bibliothèque d'API Google est séparée pour chaque service, spécifiez la bibliothèque pour Gmail. Incluez également spring-boot-starter-mail pour le formatage des données de courrier.

build.gradle


    // https://mvnrepository.com/artifact/com.google.apis/google-api-services-gmail
    compile group: 'com.google.apis', name: 'google-api-services-gmail', version: 'v1-rev72-1.23.0'

    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.8.RELEASE'
    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.5.8.RELEASE'

L'authentification a commencé

Pour profiter de l'API de Gmail, vous devez d'abord diriger l'utilisateur vers la page de connexion Google et recevoir un code d'autorisation à partir de là. La page source elle-même peut être séparée de l'URI de redirection.

À ce stade, consultez la Liste des étendues et définissez celle pour obtenir les privilèges requis. De plus, vous ne pouvez pas obtenir de jeton d'actualisation à moins de le définir sur setAccessType (" offline "). SetApprovalPrompt (" force "). Dans ce cas, la période de validité expirera dans un jour.

    private static final Collection<String> SCOPES = Arrays
            .asList("https://mail.google.com/");

    @GetMapping("/")
    public void mail(@NonNull HttpServletResponse res)
            throws GeneralSecurityException, IOException {
        //L'authentification a commencé
        val jsonFactory = JacksonFactory.getDefaultInstance();
        val transport = GoogleNetHttpTransport.newTrustedTransport();
        val flow = new GoogleAuthorizationCodeFlow.Builder(transport,
                jsonFactory, CLIENT_ID, CLIENT_SECRET, SCOPES).build();
        val url = flow.newAuthorizationUrl().setAccessType("offline")
                .setApprovalPrompt("force").setRedirectUri(REDIRECT_URI)
                .build();
        res.sendRedirect(url);
    }

Notez que val dans ce qui précède est lombok.val, qui sert à omettre la déclaration de type.

Obtenez un jeton

Une fois approuvé par l'utilisateur, vous serez redirigé vers l'URI de redirection spécifié avec un code d'autorisation, et vous obtiendrez un jeton basé sur cela.

    @GetMapping(PATH)
    public String doMail(@RequestParam @NonNull final String code)
            throws Exception {
        //Paramètre de jeton
        val jsonFactory = JacksonFactory.getDefaultInstance();
        val transport = GoogleNetHttpTransport.newTrustedTransport();
        val token = new GoogleAuthorizationCodeTokenRequest(transport,
                jsonFactory, CLIENT_ID, CLIENT_SECRET, code, REDIRECT_URI)
                        .execute();
        val cred = new GoogleCredential.Builder().setJsonFactory(jsonFactory)
                .setTransport(transport)
                .setClientSecrets(CLIENT_ID, CLIENT_SECRET).build()
                .setFromTokenResponse(token);

Notez que si vous connaissez le jeton d'une manière ou d'une autre, vous pouvez ignorer le processus d'authentification de l'utilisateur en créant directement l'objet TokenResponse.

Création de données de messagerie

Les données de courrier elles-mêmes sont des données de texte encodées en Base64URL selon la RFC 2822. Si vous écrivez ceci avec StringBuilder etc., cela peut conduire à des vulnérabilités telles que l'injection d'en-tête, donc cette fois j'utiliserai MimeMessageHelper de Spring.

        val email = new MimeMessageHelper(
                this.javaMailSender.createMimeMessage(), "UTF-8");
        email.setSubject("tester");
        email.setTo("fuga@localhost");
        email.setText("Hogehoge");
        val baos = new ByteArrayOutputStream();
        email.getMimeMessage().writeTo(baos);
        val msg = new Message()
                .setRaw(Base64.encodeBase64URLSafeString(baos.toByteArray()));

La seconde moitié de ce qui précède est comme décrit dans le Guide de Google.

Appel API

Créez un objet Gmail avec un objet GoogleCredential contenant un jeton d'accès. Tout ce que vous avez à faire est de sélectionner l'API à partir de là et d'exécuter execute ().

        val gmail = new Gmail.Builder(transport, jsonFactory, cred)
                .setApplicationName("thud").build();
        val res = gmail.users().messages().send(EMAIL, msg).execute();
        // val res = gmail.users().labels().list(EMAIL).execute();
        return res.toString();

Recommended Posts

Essayez d'envoyer un e-mail avec la bibliothèque cliente de l'API Gmail pour Java
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
Créez un alias pour Route53 vers CloudFront avec l'API AWS
J'ai essayé d'envoyer du courrier depuis le serveur Sakura avec flask-mail
Essayez d'envoyer les résultats agrégés des deux enregistrements par e-mail avec pykintone
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
Obtenez un jeton d'accès pour l'API Pocket
J'ai essayé d'envoyer un email avec SendGrid + Python
Essayez de créer un environnement pour MayaPython avec VisualStudioCode
Remarques sur les transactions dans la bibliothèque client Java dans la banque de données
[Boto3] Rechercher des utilisateurs Cognito avec l'API List Users
J'ai essayé de frapper l'API avec le client python d'echonest
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
[Python] Envoyez un e-mail depuis Gmail avec le paramètre d'authentification en deux étapes
J'ai essayé d'envoyer un e-mail d'Amazon SES avec Python
Obtenez des données de l'API d'analyse avec le client API Google pour python
(Pour les débutants) Essayez de créer une API Web simple avec Django
Pour le moment, essayez d'utiliser l'API de dialogue de discussion docomo
Créer une API avec Django
Essayez Auto Encoder avec Pytorch
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API PeeringDB 2.0
Appelez l'API avec python3.
Accordez un jeton d'accès avec la commande curl et POST l'API