
com.threewks.spring.gmail.SpringGaeGmailConfiguration Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spring-gae-gmail Show documentation
Show all versions of spring-gae-gmail Show documentation
Spring Boot, Google App Engine and Gmail integration
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