Coder Social home page Coder Social logo

mailgun's People

Contributors

galan avatar jlannoy avatar sargue avatar vitaliibv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mailgun's Issues

Issue below API 19

Caused by: java.lang.NoClassDefFoundError: java.util.Objects

this error occur.
Please help!

Validate that template exists before sending

Currently if you provide a name of a template that does not exist in mailgun it returns a success response, however the message is never sent as the template does not exist. This can be implemented using the GET /domain/templates endpoint which returns a list of the templates that exist for your domain.

Can this work with mail gun sandbox and where is baseUrl configuration?

Hello @sargue, I would like to send email with mailgun using your library, I am using mail gun for the first time and I am still blocked during the configuration step:

This is what you recon:

Configuration configuration = new Configuration()
    .domain("somedomain.com")
    .apiKey("key-xxxxxxxxxxxxxxxxxxxxxxxxx")
    .from("Test account", "[email protected]");

This is is my configuration values picked from mailgun, I would like to start with the sandbox, and later in production use something else:

  mail-gun:
    base-url: https://api.mailgun.net/v3/sandbox33b1xxxxxxxxxxxxxxxb808d.mailgun.org
    domain: myd0main.com
    api-key: 771adeexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxace86
    from-name: Excited User
    from: [email protected]

This is how I configure the plugin:

@Configuration
public class MailGunConfig {

    @Autowired
    private MailGunProperties mailGunProperties;

    @Bean
    public net.sargue.mailgun.Configuration mailGunConfiguration() {
        return new net.sargue.mailgun.Configuration()
                .domain(mailGunProperties.getDomain())
                .apiKey(mailGunProperties.getApiKey())
                .from(mailGunProperties.getFromName(), mailGunProperties.getFrom());
    }

}

This is how I trigger the test send mail:

@RestController
@RequestMapping("/public/mailgun")
public class MailGunController {

    @Autowired
    private net.sargue.mailgun.Configuration configuration;

    @GetMapping
    public void testMail() {
        Mail.using(configuration)
                .to("[email protected]")
                .subject("This is the subject")
                .text("Hello world!")
                .build()
                .send();
    }

}

When I run curl http://localhost/public/mailgun, the function get triggered, but I do not get any email not error.

This is Mailgun tutorial to use their sandbox:

API key: 771adeexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxace86

API base URL: > https://api.mailgun.net/v3/sandbox33b1xxxxxxxxxxxxxxxb808d.mailgun.org

Here’s the basic code you need. Plug in your API info from above and modify the from address, to address, and other content to give Mailgun a good old test drive.

import java.io.File;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
public class MGSample {
	 // ...
	public static JsonNode sendSimpleMessage() throws UnirestException {
		HttpResponse<JsonNode> request = Unirest.post("https://api.mailgun.net/v3/" + YOUR_DOMAIN_NAME + "/messages"),
			.basicAuth("api", API_KEY)
			.queryString("from", "Excited User <[email protected]>")
			.queryString("to", "[email protected]")
			.queryString("subject", "hello")
			.queryString("text", "testing")
			.asJson();
		return request.getBody();
	}
}

I have enabled DEBUG logging with logging.level.net.sargue.mailgun=DEBUG, logging.level.org=DEBUG and logging.level.com=DEBUG and this is the debug log I had:

Creating new transaction with name [null]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
Acquired Connection [ProxyConnection[PooledConnection[org.postgresql.jdbc.PgConnection@7aca4144]]] for JDBC transaction
Switching JDBC Connection [ProxyConnection[PooledConnection[org.postgresql.jdbc.PgConnection@7aca4144]]] to manual commit
Executing prepared SQL update
Executing prepared SQL statement [DELETE FROM SPRING_SESSION WHERE MAX_INACTIVE_INTERVAL < (? - LAST_ACCESS_TIME) / 1000]
SQL update affected 0 rows
Initiating transaction commit
Committing JDBC transaction on Connection [ProxyConnection[PooledConnection[org.postgresql.jdbc.PgConnection@7aca4144]]]
Releasing JDBC Connection [ProxyConnection[PooledConnection[org.postgresql.jdbc.PgConnection@7aca4144]]] after transaction
Returning JDBC Connection to DataSource
Cleaned up 0 expired sessions
    findResources(META-INF/services/org.glassfish.jersey.spi.HeaderDelegateProvider)
    findResources(META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable)
    findResources(META-INF/services/org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable)
Selected ExecutorServiceProvider implementation [org.glassfish.jersey.client.DefaultClientAsyncExecutorProvider] to be used for injection of executor qualified by [org.glassfish.jersey.client.ClientAsyncExecutor] annotation.
Restricted headers are not enabled using [sun.net.http.allowRestrictedHeaders] system property (setting only takes effect on connections created after the property has been set/changed).

I do not see anything related to my email being send.

It work fine when I use the curl code sample to send email.

Now I am wondering:

  • what is baseUrl for and why is it missing in your configuration?
  • does your plugin fits for using with the sandbox?

Remove glassfish dependency

Glassfish is a huge dependency that I would rather not have to deal with. Without looking too much through your code, I bet I can be removed. See https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/managed_vms/mailgun/src/main/java/com/example/managedvms/mailgun/MailgunServlet.java and consider:


        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.19.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.19.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-multipart</artifactId>
            <version>1.19.1</version>
        </dependency>

Response to return message body

The Response object has properties for the responseType and responseCode, but does not handle the message body, which is returned in JSON format from POST requests.
e.g:
On successfully submitting a message (i.e. responseCode 200), the following response message is returned:

{ "id": "<[email protected]>", "message": "Queued. Thank you." }

This is useful as it returns the message id. Retrieving this is necessary as I wish to store email events and use webhooks to update the email state.

Revised version of Response.java:
`
package net.sargue.mailgun;

/**

  • Represents a response from the Mailgun service.
    */
    public class Response {
    public enum ResponseType {
    OK, BAD_REQUEST, UNAUTHORIZED, REQUEST_FAILED, NOT_FOUND, SERVER_ERROR
    }

    private ResponseType responseType;
    private int responseCode;
    private String responseMessage;

    Response(javax.ws.rs.core.Response response) {
    responseCode = response.getStatus();
    responseMessage = response.readEntity(String.class);
    switch (responseCode) {
    case 200:
    responseType = ResponseType.OK;
    break;
    case 400:
    responseType = ResponseType.BAD_REQUEST;
    break;
    case 401:
    responseType = ResponseType.UNAUTHORIZED;
    break;
    case 402:
    responseType = ResponseType.REQUEST_FAILED;
    break;
    case 404:
    responseType = ResponseType.NOT_FOUND;
    break;
    default:
    responseType = ResponseType.SERVER_ERROR;
    }
    }

    /**

    • The type of the response.
      *
    • @return the type of the response
      */
      public ResponseType responseType() {
      return responseType;
      }

    /**

    • The HTTP status code of the response.
      *
    • The different recognized codes are better encoded with the
    • {@link ResponseType}. This method accesses the exact status code.
      *
    • @return the HTTP status code of the response
      */
      public int responseCode() {
      return responseCode;
      }

    /**

    • The HTTP message body of the response.
      *
    • @return the HTTP message body of the response
      */
      public String responseMessage() {
      return responseMessage;
      }

    /**

    • Shortcut method for checking if the response is ok. Equivalent of
    • checking if the {@link ResponseType} is {@code ResponseType.OK}.
      *
    • @return if the request was a success
      */
      public boolean isOk() {
      return responseType == ResponseType.OK;
      }
      }
      `

Cannot Build Android Release APK

Hello!

First off, thank you for this library, it has immensely sped up my development time!

I'm trying to include this library in my Android app. When building for development, everything works fine, but when I build my release APK, I get this error:

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Ljavax/inject/Inject;

When I run gradle -q dependencies, I see that there is multiple Injects defined:

+--- net.sargue:mailgun:1.0.0
|    +--- org.glassfish.jersey.media:jersey-media-multipart:[2.22,) -> 2.22.2
|    |    +--- org.glassfish.jersey.core:jersey-common:2.22.2
|    |    |    +--- javax.ws.rs:javax.ws.rs-api:2.0.1
|    |    |    +--- javax.annotation:javax.annotation-api:1.2
|    |    |    +--- org.glassfish.jersey.bundles.repackaged:jersey-guava:2.22.2
|    |    |    +--- org.glassfish.hk2:hk2-api:2.4.0-b34
|    |    |    |    +--- javax.inject:javax.inject:1
|    |    |    |    +--- org.glassfish.hk2:hk2-utils:2.4.0-b34
|    |    |    |    |    \--- javax.inject:javax.inject:1
|    |    |    |    \--- org.glassfish.hk2.external:aopalliance-repackaged:2.4.0-b34
|    |    |    +--- org.glassfish.hk2.external:javax.inject:2.4.0-b34
|    |    |    +--- org.glassfish.hk2:hk2-locator:2.4.0-b34
|    |    |    |    +--- org.glassfish.hk2.external:javax.inject:2.4.0-b34

Is there a way around this?

Configuration.apiURL() does not exist

The documentation (README.md) shows the below example:
Configuration configuration = new Configuration()
.domain("somedomain.com")
.apiURL("https://api.eu.mailgun.net/v3")
.apiKey("key-xxxxxxxxxxxxxxxxxxxxxxxxx")
.from("Test account", "[email protected]");

but the apiURL method does not exist. Use the apiUrl method instead.

ClassNotFound

I try to send the email using this lib it run error.

java.lang.ClassNotFoundException: jakarta.ws.rs.client.ClientBuilder

Is there any advice?

Thanks

java.lang.ClassNotFoundException: jakarta.ws.rs.client.ClientBuilder

I have this error:

java.lang.ClassNotFoundException: jakarta.ws.rs.client.ClientBuilder
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]

I add these libs

 <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>3.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>6.1.0.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>net.sargue</groupId>
            <artifactId>mailgun</artifactId>
            <version>1.10.0</version>
        </dependency>

Any suggestion?

Thanks

Error message

Hi,
Each time i try to send an email it is delayed by few minutes until i receive it and i get the following error message (it doesn't crash, only appears):
W/Errors: The following warnings have been detected: WARNING: HK2 service reification failed for [org.glassfish.jersey.message.internal.DataSourceProvider] with an exception:
MultiException stack 1 of 4
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: javax.activation.DataSource
at org.glassfish.hk2.utilities.cache.LRUHybridCache.compute(LRUHybridCache.java:315)
at org.glassfish.hk2.utilities.reflection.internal.ClassReflectionHelperImpl.getAllMethods(ClassReflectionHelperImpl.java:108)
at org.jvnet.hk2.internal.Utilities.findInitializerMethods(Utilities.java:1341)
at org.jvnet.hk2.internal.DefaultClassAnalyzer.getInitializerMethods(DefaultClassAnalyzer.java:107)
at org.glassfish.jersey.internal.inject.JerseyClassAnalyzer.getInitializerMethods(JerseyClassAnalyzer.java:242)
at org.jvnet.hk2.internal.Utilities.getInitMethods(Utilities.java:218)
at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:145)
at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:180)
at org.jvnet.hk2.internal.SystemDescriptor.internalReify(SystemDescriptor.java:740)
at org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:694)
at org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:461)
at org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2288)
at org.jvnet.hk2.internal.ServiceLocatorImpl.access$1200(ServiceLocatorImpl.java:125)
at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1373)
at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1368)
at org.glassfish.hk2.utilities.cache.internal.WeakCARCacheImpl.compute(WeakCARCacheImpl.java:116)
at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1430)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1355)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1344)
at org.glassfish.jersey.internal.inject.Providers.getServiceHandles(Providers.java:354)
at org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:201)
at org.glassfish.jersey.message.internal.MessageBodyFactory.(MessageBodyFactory.java:221)
at java.lang.reflect.Constructor.newInstance(Native Method)
at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1375)
at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:272)
at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:366)
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487)
at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83)
at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:71)
at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154)
at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:122)
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)
at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:774)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:786)
at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:111)
at org.glassfish.jersey.client.RequestProcessingInitializationStage.apply(RequestProcessingInitializationStage.java:97)
at org.glassfish.jersey.client.RequestProcessingInitializationStage.apply(RequestProcessingInitializationStage.java:67)
at org.glassfish.jersey.process.internal.Stages$LinkedStage.apply(Stages.java:308)
at org.glassfish.jersey.process.internal.Stages.process(Stages.java:171)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:25

javax.ws.rs.client configuration?

I need to change default configuration of rest client, at least timeouts.
How can I change client configuration using your mailgun library?

I found this part of code:

    void configureClient(Client client) {
        //defaults to no-op
    }

    private Invocation.Builder request() {
        Client client = JerseyClientBuilder.newClient();
        configureClient(client);
        return client
                .register(configuration.httpAuthenticationFeature())
                .target(configuration.apiUrl())
                .path(configuration.domain())
                .path("messages")
                .request();
    }

JerseyClientBuilder.newClient() can take javax.ws.rs.core.Configuration as argument, but method is private and I cannot override it. Method configureClient is package-private like its class itself and I cannot extend MailForm or MailMultipart.

I need to do smth like this:

    ClientConfig configuration = new ClientConfig();
    configuration.property(ClientProperties.CONNECT_TIMEOUT, 10000);
    configuration.property(ClientProperties.READ_TIMEOUT, 30000);
    Client client = ClientBuilder.newClient(configuration);

Email is not sending , warning is coming all the time after a delay.

Hi admin ,
i have consumed many hours to merge and implement this library , but no success.
i followed almost all documentation but still this warning is coming and no success.

Gradle :
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

implementation 'net.sargue:mailgun:1.9.0'

configurations { // its must require if you use "net.sargue:mailgun:1.9.0"
all*.exclude group: 'org.glassfish.hk2.external', module:'javax.inject'
}

Java Code :
private class HeavyTask extends AsyncTask<String, Void, Void> {

    protected Void doInBackground(String... args) {

        Configuration configuration = new Configuration()
                .domain("somedomain.com")
                .apiKey("key-685e54***********b18cc3c480da9b98***************")
                .from("Test account", "[email protected]");

        Mail.using(configuration)
                .to("[email protected]")
                .subject("This is the subject")
                .text("Hello world!")
                .build()
                .send();

        return null;
    }

    protected void onPostExecute(Void results) {
        Toast.makeText(MainActivity.this, "Mail sent", Toast.LENGTH_SHORT).show();
    }
} 

WARNING IS :

01-23 13:07:22.699 30917-31016/com.bin.mailsender W/Errors: The following warnings have been detected: WARNING: HK2 service reification failed for [org.glassfish.jersey.message.internal.DataSourceProvider] with an exception:
MultiException stack 1 of 4
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/activation/DataSource;
at org.glassfish.hk2.utilities.cache.LRUHybridCache.compute(LRUHybridCache.java:315)
at org.glassfish.hk2.utilities.reflection.internal.ClassReflectionHelperImpl.getAllMethods(ClassReflectionHelperImpl.java:108)
at org.jvnet.hk2.internal.Utilities.findInitializerMethods(Utilities.java:1341)
at org.jvnet.hk2.internal.DefaultClassAnalyzer.getInitializerMethods(DefaultClassAnalyzer.java:107)
at org.glassfish.jersey.internal.inject.JerseyClassAnalyzer.getInitializerMethods(JerseyClassAnalyzer.java:242)
at org.jvnet.hk2.internal.Utilities.getInitMethods(Utilities.java:218)
at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:145)
at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:180)
at org.jvnet.hk2.internal.SystemDescriptor.internalReify(SystemDescriptor.java:740)
at org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:694)
at org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:461)
at org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2288)
at org.jvnet.hk2.internal.ServiceLocatorImpl.access$1200(ServiceLocatorImpl.java:125)
at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1373)
at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1368)
at org.glassfish.hk2.utilities.cache.internal.WeakCARCacheImpl.compute(WeakCARCacheImpl.java:116)
at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1430)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1355)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1344)
at org.glassfish.jersey.internal.inject.Providers.getServiceHandles(Providers.java:354)
at org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:201)
at org.glassfish.jersey.message.internal.MessageBodyFactory.(MessageBodyFactory.java:221)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1375)
at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:272)
at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:366)
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487)
at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83)
at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:71)
at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154)
at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:122)
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)
at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:774)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:786)
at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:111)
at org.glassfish.jersey.client.RequestProcessingInitializationStage.apply(RequestProcessingInitializationStage.java:97)
at org.glassfish.jersey.client.RequestProcessingInitializationStage.apply(RequestProcessingInitializationStage.java:67)
at org.glassfish.jersey.process.internal.Stages$LinkedStage.apply(Stages.java:308)
at org.glassfish.jersey.process.internal.Stage
01-23 13:07:23.363 30917-30940/com.bin.mailsender I/zygote64: Background concurrent copying GC freed 86937(5MB) AllocSpace objects, 152(7MB) LOS objects, 49% free, 15MB/31MB, paused 135us total 692.443ms
01-23 13:07:23.371 30917-30917/com.bin.mailsender I/Toast: Show toast from OpPackageName:com.bin.mailsender, PackageName:com.bin.mailsender

Plesae help me to sort out this issue

Resource leak by not closing the client

The HTTP client is not explicitly closed, leading to possible leaks. The JAX-RS ClientBuilder is dynamically resolved, which in my case uses RestEasy instead of Jersey. In that case it uses a finalizer to log a warning that the client wasn't closed, which is a requirement of the API. It would also be nice if these were pooled.

These issues makes it a little uncomfortable to use this SDK in a production with a reasonable email volume.

 * Client is the main entry point to the fluent API used to build and execute client
 * requests in order to consume responses returned.
 * <p/>
 * Clients are heavy-weight objects that manage the client-side communication
 * infrastructure. Initialization as well as disposal of a {@code Client} instance
 * may be a rather expensive operation. It is therefore advised to construct only
 * a small number of {@code Client} instances in the application. Client instances
 * must be {@link #close() properly closed} before being disposed to avoid leaking
 * resources.

private Invocation.Builder request() {
Client client = JerseyClientBuilder.newClient();
if (configuration.connectTimeout() != 0)
client.property(CONNECT_TIMEOUT, configuration.connectTimeout());
if (configuration.readTimeout() != 0)
client.property(READ_TIMEOUT, configuration.readTimeout());
configureClient(client);
return client
.register(configuration.httpAuthenticationFeature())
.target(configuration.apiUrl())
.path(configuration.domain())
.path("messages")
.request();
}

Specifically use JerseyClientBuilder

in Mail.java a new client is built with:
Client client = ClientBuilder.newClient();

Since MailMultipart depends specifically on Jersey features, it would be better to use:
Client client = JerseyClientBuilder.createClient();

This becomes an issue if you happen to have e.g. RESTEasy in classpath as well. Then you might end up in a situation where a RESTEasy client tries to register a Jersey specific multi part feature:
client.register(MultiPartFeature.class);

Error on JDK21

I am using JDK21 with Spring Boot 3.2.1.
I have this Error:

java.lang.NoSuchMethodError: 'javax.ws.rs.client.Client org.glassfish.jersey.client.JerseyClientBuilder.newClient()'

Executing on Stand Alone Gradle project, but facing exception

Configuration config = new Configuration("xx.xxxxx.xx", "key-xxxxxxx4", "saikiran<[email protected]>");
Response res = Mail.using(config).to("[email protected]").subject("Testing Mail").text("Invoking Mail API from Java ").build().send();
System.out.println(res.responseMessage());

I'm running above code on stand alone Gradle Application, I've added all the jars, but still getting below Exception, could you guide me where I'm doing wrong.

Exception in thread "main" javax.ws.rs.ProcessingException: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family;
	at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:261)
	at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
	at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
	at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681)
	at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437)
	at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343)
	at net.sargue.mailgun.Mail.send(Mail.java:40)
	at cloudseed.wishkarma.services.MailingService.sendMail(MailingService.java:40)
	at cloudseed.wishkarma.app.ChatApp.main(ChatApp.java:59)
Caused by: java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family;
	at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.java:63)
	at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.java:54)
	at org.glassfish.jersey.message.internal.Statuses.from(Statuses.java:143)
	at org.glassfish.jersey.client.internal.HttpUrlConnector._apply(HttpUrlConnector.java:402)
	at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:285)
	at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:252)
	... 12 more

Add support for Mailgun's MIME API call

Mailgun supports sending MIME messages calling /messages.mime instead of /messages. To build a Mail object, it should be just a matter of passing the MIME-formatted message to MailBuilder.text(), or if there is some handling that would break the format, then adding a new MailBuilder.mime(). Also in this case no subject is needed.

What do you think, worth considering?

Thanks for the good library!

This is not an issue. I just want to explain how to use this library on Android

Add this lines to gradle dependencies and configurations modules.
That is it. So after this steps you can use this library on android.

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'net.sargue:mailgun:1.3.2'
}
configurations {
compile.exclude group: 'javax.inject', module: 'javax.inject'
}

Add support for logging

Following #33, I can see that there's no way to log the request send to mail gun.

This issue is about adding logging capability for troubleshooting without wireshark/charles proxy (and it's https...).

How to Multiple attachment?

Hi Sargue,
I am able to send mail with a single attachment . But I don't know to add the multiple attachments.Please help with this.
Thanks in advance.

How to send HTML with thymeleaf

Hi @sargue,

I am importing a String that is an HTML builded with thymeleaf, I'd like to send the email with HTML content, but not sure how I can do, I have tried to use Body.builder().p(myHtml), also tried .text(myHtml), I always end up with text.

How can I send the html myself?

Unable to pass the HTTPHeader

I have used the Mailgun api ,net.sargue.mailgun
there is only provision of setting the APIKEY
Configuration configuration = new Configuration()
.domain("https://sgout-dv.allstate.com/sg/b2b/SMCE/AgencyEmail/SGE/")
.apiKey("bce4e20axxxxxxxxxxx27-b6183ad4-ae0c0de6");
I supposed to pass the "Authorization" Header along with above APIkey, but configuration is only limited to pass apikey.
Is there any way to pass the Headers.

How best to debug a bad request?

Sergi, Firstly thank you for writing this first class wrapper. Well written and documented.

What would be the best way for me to debug a message I'm trying to send that has a response of 400? I am obviously providing some duff information somewhere. Is it possible to return what I am trying to post in some way? It is not complicated. In fact very much like your most simple example.

Please add information for using the EU API in the documentation

Dear creator,

I really appreciate your library, I use it in my projects since long ago

I've been wondering why I wasn't able to send mails, until I finally solved it

Please add a warning or example in configuration for EU mailgun API, as I'm sure I won't be the last one to find this issue. This can be a rather invisible issue, making you wonder what's wrong for a long time

.apiUrl("https://api.eu.mailgun.net/v3")

Thank you
Best regards

Templates support

I would like to ask you if the library supports mailgun templates?

Java 8

Hi

Thank you very much for this library.
It seems that some (all?) of your dependencies are now compiled with java 8?
I have used your library for about 2 months, but suddenly i get this error:
java.lang.IllegalArgumentException: Class file is Java 8 but max supported is Java 7: javax/ws/rs/ApplicationPath.class in build/exploded-app/WEB-INF/lib/javax.ws.rs-api-2.1-m02.jar

To me it looks like gradle downloaded new "versions" of your dependencies and now they are compiled using java 8. I know this isn't an error in your library per se, but I don't know how to fix this. Do you?
Let me know if you need more info

Thank you in advance

Having slight issue with sending attachments when emailing

I appreciate this is more than likely something I am doing as aposed to a bug with your system.

I am having difficulty sending emails with attachments. I am successfully sending the email but the attachment does not come thorugh.

MailBuilder builder = new MailBuilder(this.configuration);
            builder.from((!from.isEmpty() ? from : Settings.Retrieve("MAILGUN_FROM_NAME") + " <" + Settings.Retrieve("MAILGUN_FROM_ADDRESS") + ">"));
            builder.to(to);
            if(!cc.isEmpty()) {
                builder.cc(cc);
            }
            if(!bcc.isEmpty()) {
                builder.bcc(bcc);
            }
            builder.subject(subject);
            builder.html(html);
            if (!files.isEmpty()) {
                String[] attachedFiles = files.split(",");
                for (String file: attachedFiles) {
                    URL url = new URL(file);
                    String tDir = System.getProperty("java.io.tmpdir");
                    String path = tDir + "tmp" + ".txt";
                    File newFile = new File(path);
                    FileUtils.copyURLToFile(url, newFile);
                    builder.multipart().attachment(newFile);
                    newFile.deleteOnExit();
                }
            }
            builder.build().send();

Here is an example of my code. I am moderately new to Java so may have done something completely incorrect. The attachment is an external URL.

I receive no errors when debugging.

Any help would be greatly appreciated.

Thanks,
Jamie

NoSuchMethodError 'void javax.ws.rs.core.MultivaluedMap.addAll(java.lang.Object, java.util.List)'

Code snippet

log.info("Sending info to email...");
Configuration config = new Configuration()
      .domain(env.getProperty("mailgun.domain"))
      .apiKey(env.getProperty("mailgun.apiKey"))
      .from(request.getSender());

Mail
      .using(config)
      .to(request.getEmail())
      .subject(request.getSubject())
      .template(request.getTemplate())
      .build()
      .send();

Error

java.lang.NoSuchMethodError: 'void javax.ws.rs.core.MultivaluedMap.addAll(java.lang.Object, java.util.List)'
	at net.sargue.mailgun.MailForm.prepareSend(MailForm.java:42) ~[mailgun-1.10.0.jar:na]
	at net.sargue.mailgun.Mail.send(Mail.java:69) ~[mailgun-1.10.0.jar:na]

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>dost1services</artifactId>
    <groupId>ph.gov.dost.region1</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>jar</packaging>
  <groupId>io.ryan</groupId>
  <artifactId>notification</artifactId>

  <dependencies>
    <dependency>
      <groupId>io.ryan</groupId>
      <artifactId>clients</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.ryan</groupId>
      <artifactId>amqp</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-sleuth-zipkin</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

    <dependency>
      <groupId>net.sargue</groupId>
      <artifactId>mailgun</artifactId>
      <version>1.10.0</version>
    </dependency>

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>2.1.210</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

Support for JavaEE to Jakarta package naming migration

when i upgrade project to spring boot 3, there is an error which realated with mailgun configuration,
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.MultivaluedMap
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na]
... 56 common frames omitted

Spring boot 3 change javax. to jakarta. package, does anyone have a solution ?

adding header

hello,

can i add header on email? if yes, how to add?

thankyou

Does not build in Glassfish 4.0, JDK 8.x and JEE 7.0

I am using Glassfish 4.0 with Java 8.x and JEE 7.0. I get the following exception when I try to build and create a war file.

Exception:

remote failure: Error occurred during deployment: Exception while loading the app : 
CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [Providers] with qualifiers [@Default] at injection point [[BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public org.glassfish.jersey.media.multipart.internal.MultiPartReaderServerSide(@Context Providers, Provider<CloseableService>)]. Please see server.log for more details.
Command deploy failed.

Here is my POM.xml

		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
			<version>2.25</version>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-multipart</artifactId>
			<version>2.25</version>
		</dependency>
		<dependency>
			<groupId>net.sargue</groupId>
			<artifactId>mailgun</artifactId>
			<version>1.5.0</version>
		</dependency>

I would appreciate any help. Thanks in advance.

1.1.0 not available

Was looking to try this out but the 1.1.0 is not available via standard maven repositories:

<dependency>
    <groupId>net.sargue</groupId>
    <artifactId>mailgun</artifactId>
    <version>1.1.0</version>
</dependency>

1.0.0 is, but it seems like a lot changed between these two versions.

InjectionManagerFactory not found

I create new repo to run this libs.
Spring Boot 2.4.4 version
JDK 11

It show error as follow:

Here is my controller

    @GetMapping("/sendMailGun2")
    public void sendEmail() {
        Configuration configuration = new Configuration()
                .domain("example.org")
                .apiKey(apiKeyStr)
                .from("Test MailGun Lib", "[email protected]");

        Mail.using(configuration)
                .to("[email protected]")
                .subject(subjectStr)
                .text(textStr)
                .build()
                .send();
    }

Error:

2021-04-08 16:47:05.617 ERROR 11322 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: InjectionManagerFactory not found.] with root cause

java.lang.IllegalStateException: InjectionManagerFactory not found.
	at org.glassfish.jersey.internal.inject.Injections.lambda$lookupInjectionManagerFactory$0(Injections.java:74) ~[jersey-common-2.32.jar:na]
	at org.glassfish.jersey.internal.inject.Injections$$Lambda$1023/000000000000000000.get(Unknown Source) ~[na:na]
	at java.base/java.util.Optional.orElseThrow(Optional.java:408) ~[na:na]
	at org.glassfish.jersey.internal.inject.Injections.lookupInjectionManagerFactory(Injections.java:74) ~[jersey-common-2.32.jar:na]
	at org.glassfish.jersey.internal.inject.Injections.createInjectionManager(Injections.java:44) ~[jersey-common-2.32.jar:na]
	at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:412) ~[jersey-client-2.32.jar:na]
	at org.glassfish.jersey.client.ClientConfig$State$$Lambda$1005/000000000000000000.get(Unknown Source) ~[na:na]
	at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:317) ~[jersey-common-2.32.jar:na]
	at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:814) ~[jersey-client-2.32.jar:na]
	at org.glassfish.jersey.client.ClientRequest.getClientRuntime(ClientRequest.java:219) ~[jersey-client-2.32.jar:na]
	at org.glassfish.jersey.client.ClientRequest.getInjectionManager(ClientRequest.java:610) ~[jersey-client-2.32.jar:na]
	at org.glassfish.jersey.client.JerseyWebTarget.onBuilder(JerseyWebTarget.java:364) ~[jersey-client-2.32.jar:na]
	at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:192) ~[jersey-client-2.32.jar:na]
	at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:36) ~[jersey-client-2.32.jar:na]
	at net.sargue.mailgun.Mail.request(Mail.java:138) ~[mailgun-1.10.0.jar:na]
	at net.sargue.mailgun.Mail.send(Mail.java:70) ~[mailgun-1.10.0.jar:na]
	at com.hendisantika.springbootexportimportexcelpoi.controller.MailGunController.sendEmail(MailGunController.java:122) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.44.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.5.jar:5.3.5]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.44.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.5.jar:5.3.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.5.jar:5.3.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.5.jar:5.3.5]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.5.jar:5.3.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
	at java.base/java.lang.Thread.run(Thread.java:836) ~[na:na]

Any advice?
Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.