All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.threewks.spring.gmail.SpringGaeGmailConfiguration Maven / Gradle / Ivy

The newest version!
package com.threewks.spring.gmail;

import com.google.api.client.extensions.appengine.datastore.AppEngineDataStoreFactory;
import com.google.api.client.extensions.appengine.http.UrlFetchTransport;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.DataStoreFactory;
import com.google.api.services.gmail.GmailScopes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;

import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
@ConditionalOnMissingBean(JavaMailSender.class)
@Configuration
public class SpringGaeGmailConfiguration {
    private static final Logger LOGGER = LoggerFactory.getLogger(SpringGaeGmailConfiguration.class);

    @Bean
    public GmailAdminController gmailAdminController(GoogleAuthorizationCodeFlow flow, @Value("${app.host}") String host,
            @Value("${gmail.AdminRootPath:/system/gmail}") String adminRootPath) {
        return new GmailAdminController(flow, host, adminRootPath);
    }

    @Bean
    @ConditionalOnMissingBean
    public JavaMailSender gmailSender(GoogleAuthorizationCodeFlow flow, Optional> messageInterceptors) {
        return new GmailSender(flow, messageInterceptors.orElse(Collections.emptyList()));
    }

    @Bean
    @ConditionalOnProperty("gmail.diverter.enabled")
    public DivertingMailInterceptor divertingMailInterceptor(
            @Value("${gmail.diverter.recipients}") String[] divertMailTo,
            @Value("${gmail.diverter.subjectPrefix}") Optional subjectPrefix) {
        DivertingMailInterceptor divertingMailInterceptor = new DivertingMailInterceptor(divertMailTo);
        subjectPrefix.ifPresent(divertingMailInterceptor::setSubjectPrefix);
        return divertingMailInterceptor;
    }

    @Bean
    public GoogleAuthorizationCodeFlow googleAuthorizationCodeFlow(@Value("${gmail.OAuthClientId}") String clientId,
            @Value("${gmail.OAuthClientSecret}") String clientSecret,
            Optional dataStoreFactory,
            Optional httpTransport) {

        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
        Collection scopes = Collections.singleton(GmailScopes.GMAIL_COMPOSE);

        HttpTransport transportInstance = httpTransport
                .orElseGet(() -> {
                    LOGGER.info("httpTransport not found, will use UrlFetchTransport.getDefaultInstance()");
                    return UrlFetchTransport.getDefaultInstance();
                });

        DataStoreFactory datastoreInstance = dataStoreFactory
                .orElseGet(() -> {
                    LOGGER.info("DataStoreFactory not found, will use AppEngineDataStoreFactory.getDefaultInstance()");
                    return AppEngineDataStoreFactory.getDefaultInstance();
                });

        try {
            return new GoogleAuthorizationCodeFlow.Builder(transportInstance, jsonFactory, clientId, clientSecret, scopes)
                    .setDataStoreFactory(datastoreInstance).build();
        } catch (IOException e) {
            throw new BeanInitializationException("Couldn't initialize GoogleAuthorizationCodeFlow", e);
        }

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy