You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Add mail sender support for spring-boot-testcontainers #35127
changed the title [-]Mail sender support for spring-boot-testcontainers[/-][+]Add mail sender support for spring-boot-testcontainers[/+]on Apr 25, 2023
We could update the auto-configuration to add MailConnectionDetails but I'm not sure how much we can do beyond that. As the list above shows, there are a variety of options for running an SMTP server. In terms of official Docker images for the above, there are:
How the SMTP server is configured differs from image to image so I don't think we can offer a general purpose implementation for getting connection details from a container. MailHog appears to be the most popular, so perhaps that's the place to start? It would feel a little odd to have MailConnectionDetails and only have a properties-based implementation.
The port should be fine. It's username and password that are more complicated. For example, maildev uses MAILDEV_OUTGOING_USER and MAILDEV_OUTGOING_PASS environment variables to configure the credentials for sending mail. These are easy for us to extract from the container and use in the connection details. On the other hand, MailHog seems to use a file which would be much harder to deal with unless we only supported the defaults.
@wilkinsona, is it possible to introduce org.springframework.boot.properties.xxxx labels, and these labels will be added ad Spring Boot properties. Example as following:
Value cloud be a SpEL, and container is the variable of GenericContainer or sub GenericContainer.
This way is still ok for other containers, such as NATS, Apache Pulsar etc.
It would feel a little odd to have MailConnectionDetails and only have a properties-based implementation.
Given ConnectionDetails is the entrypoint to do this, it wouldn't be that odd. Doing that, will allow to users create libraries with specific ConnectionDetailsFactory where there are more than one image or not an official image to choose such as mail and activemq. One example is RedisContainerConnectionsDetails, currently only supports standalone but there are images where cluster can be enabled and it's totally fine if spring boot doesn't provide RedisClusterConnectionDetailsFactory but the infrastructure is already there to do it for third-parties.
Therefore, having some sort of MailConnectionDetails and (in the best case) have all the infrastructure in place so we could annotate the Mailpit container bean with a @ServiceConnection would be great!
Alternatively, as I think that the solution through a DynamicPropertyRegistrar is actually already quite elegant, adjusting the initialization to not need the dummy value for sring.mail.host would be fine as well in my option.
I understand that my point of view is very Mailpit centric right now. Supporting all kinds of other mail-catching solutions through something like MailConnectionDetails might be more tricky.
All other mentioned mail-catching projects don't seem to be in active development, though.
Activity
[-]Mail sender support for spring-boot-testcontainers[/-][+]Add mail sender support for spring-boot-testcontainers[/+]wilkinsona commentedon Apr 28, 2023
We could update the auto-configuration to add
MailConnectionDetailsbut I'm not sure how much we can do beyond that. As the list above shows, there are a variety of options for running an SMTP server. In terms of official Docker images for the above, there are:How the SMTP server is configured differs from image to image so I don't think we can offer a general purpose implementation for getting connection details from a container. MailHog appears to be the most popular, so perhaps that's the place to start? It would feel a little odd to have
MailConnectionDetailsand only have a properties-based implementation.linux-china commentedon Apr 28, 2023
MailHog is good for me. All these mail catchers, they almost use 1025 as SMTP port, and I think we just use 1025 as exposed port for
spring.mail.port.wilkinsona commentedon Apr 28, 2023
The port should be fine. It's username and password that are more complicated. For example, maildev uses
MAILDEV_OUTGOING_USERandMAILDEV_OUTGOING_PASSenvironment variables to configure the credentials for sending mail. These are easy for us to extract from the container and use in the connection details. On the other hand, MailHog seems to use a file which would be much harder to deal with unless we only supported the defaults.linux-china commentedon Apr 29, 2023
@wilkinsona, is it possible to introduce
org.springframework.boot.properties.xxxxlabels, and these labels will be added ad Spring Boot properties. Example as following:Value cloud be a SpEL, and container is the variable of GenericContainer or sub GenericContainer.
This way is still ok for other containers, such as NATS, Apache Pulsar etc.
eddumelendez commentedon Apr 29, 2023
Given
ConnectionDetailsis the entrypoint to do this, it wouldn't be that odd. Doing that, will allow to users create libraries with specificConnectionDetailsFactorywhere there are more than one image or not an official image to choose such as mail and activemq. One example isRedisContainerConnectionsDetails, currently only supports standalone but there are images where cluster can be enabled and it's totally fine if spring boot doesn't provideRedisClusterConnectionDetailsFactorybut the infrastructure is already there to do it for third-parties.This is probably related.
eddumelendez commentedon May 3, 2023
For cases like this one and probably #35080 26566d4 would fix it
dominik-kovacs commentedon Mar 24, 2024
this would be a wonderful feature, however, I am not sure how much is MailHog maintained
edit:
https://github.com/axllent/mailpit This seems to be an actively maintained project
eddumelendez commentedon Sep 25, 2024
I learn about mailpit today and seems good https://hub.docker.com/r/axllent/mailpit 100M+ pulls and it offers multiarch images. Credentials can be configured via env var as well https://mailpit.axllent.org/docs/configuration/smtp/#passwords-via-environment. TLS support https://mailpit.axllent.org/docs/configuration/certificates/ and it offers a UI for local development
linux-china commentedon Sep 26, 2024
Using Mailpit with Spring Boot: https://dimitri.codes/spring-boot-mailpit/
Mailpit is great with lots of feature, and it's light.
psommersguter commentedon Oct 6, 2025
I would +1 this.
For this example repository I also added Mailpit to showcase its usage.
Although it is already very simple to add Mailpit through Testcontainers (as described in the previous mentioned blog post and as shown in the little configuration actually needed) there is an unexpected pitfall.
The MailSenderAutoConfiguration requires the
spring.mail.hostas a condition to activate.Registering the
spring.mail.hostproperty through a DynamicPropertyRegistrar bean unexpectedly is not enough to trigger the auto-configuration although the "Precendence" section of the DynamicPropertyRegistrar JavaDoc would lead you to believe otherwise.You actually need to manually set this property (e.g. in a application.properties with a dummy value) to trigger the MailSenderAutoConfiguration.
Therefore, having some sort of
MailConnectionDetailsand (in the best case) have all the infrastructure in place so we could annotate the Mailpit container bean with a@ServiceConnectionwould be great!Alternatively, as I think that the solution through a DynamicPropertyRegistrar is actually already quite elegant, adjusting the initialization to not need the dummy value for
sring.mail.hostwould be fine as well in my option.I understand that my point of view is very Mailpit centric right now. Supporting all kinds of other mail-catching solutions through something like
MailConnectionDetailsmight be more tricky.All other mentioned mail-catching projects don't seem to be in active development, though.
Cover mail service connection discovery and lifecycle