├── var └── .gitkeep ├── tests ├── data │ ├── .gitkeep │ └── templates │ │ ├── _includes │ │ └── example-include.twig │ │ ├── mjml-example │ │ ├── mjml-example.text.twig │ │ ├── mjml-example.mjml.twig │ │ └── mjml-example.meta.yml │ │ ├── new-user-welcome │ │ ├── new-user-welcome.text.twig │ │ └── new-user-welcome.meta.yml │ │ ├── simplest-test-message │ │ ├── simplest-test-message.text.twig │ │ ├── simplest-test-message.html.twig │ │ └── simplest-test-message.meta.yml │ │ ├── message-with-static-attachments │ │ ├── static-attachment.txt │ │ ├── message-with-static-attachments.text.twig │ │ ├── message-with-static-attachments.mjml.twig │ │ ├── message-with-static-attachments.schema.json │ │ └── message-with-static-attachments.meta.yml │ │ ├── message-with-attachments │ │ ├── message-with-attachments.text.twig │ │ ├── message-with-attachments.mjml.twig │ │ ├── message-with-attachments.meta.yml │ │ └── message-with-attachments.schema.json │ │ ├── template-with-include │ │ ├── template-with-include.text.twig │ │ ├── template-with-include.html.twig │ │ └── template-with-include.meta.yml │ │ └── without-text-version │ │ ├── without-text-version.html.twig │ │ └── without-text-version.meta.yml ├── integration │ └── pipeprint │ │ ├── test.sh │ │ └── docker-compose.yml ├── Unit │ └── Outstack │ │ └── Enveloper │ │ └── Resolution │ │ ├── AbstractResolutionUnitTest.php │ │ ├── AttachmentResolverTest.php │ │ ├── RecipientResolverTest.php │ │ ├── AttachmentListResolverTest.php │ │ └── RecipientListResolverTest.php └── Functional │ ├── AbstractApiTestCase.php │ ├── MessageHistoryFunctionalTest.php │ ├── MessagePreviewingFunctionalTest.php │ ├── ErrorHandlingFunctionalTest.php │ └── AttachmentHandlingFunctionalTest.php ├── docs ├── api │ ├── build │ │ ├── .gitignore │ │ ├── model │ │ │ └── .gitignore │ │ ├── resources │ │ │ ├── .gitignore │ │ │ └── errors │ │ │ │ └── .gitignore │ │ └── endpoints │ │ │ └── outbox │ │ │ ├── .gitignore │ │ │ └── preview │ │ │ └── .gitignore │ ├── package.json │ ├── index.html │ ├── build.js │ ├── yarn.lock │ └── openapi.yaml ├── examples │ └── hello-world │ │ ├── hello-world.text.twig │ │ ├── hello-world.html.twig │ │ ├── hello-world.meta.yml │ │ └── hello-world.schema.json ├── nginx-vhost.conf ├── _sidebar.md ├── 05-schema-validation-of-parameters.md ├── index.html ├── 03-configuring-the-database.md ├── 02-configuring-templates.md ├── 04-advanced-templating.md └── 01-getting-started.md ├── .dockerignore ├── schemata ├── model │ ├── template-parameters.schema.json │ ├── template-identifier.schema.json │ ├── message-request.schema.json │ └── participant.schema.json ├── endpoints │ └── outbox │ │ ├── post.requestBody.schema.json │ │ ├── preview │ │ ├── post.requestBody.schema.json │ │ └── post.responseBody.schema.json │ │ ├── getSentMessageById.responseBody.schema.json │ │ ├── get.responseBody.schema.json │ │ └── deliveryAttempts │ │ └── get.responseBody.schema.json └── resources │ ├── errors │ ├── base-error.schema.json │ ├── server-error.schema.json │ ├── bad-request.schema.json │ ├── not-acceptable.schema.json │ ├── syntax-error.schema.json │ └── failed-json-schema-validation.schema.json │ ├── delivery-attempt.schema.json │ ├── email-request.schema.json │ └── resolved-message.schema.json ├── Procfile ├── app ├── AppCache.php ├── config │ ├── config_prod.yml │ ├── routing.yml │ ├── config_dev.yml │ ├── routing_dev.yml │ ├── doctrine │ │ └── orm │ │ │ ├── Email.EmailRequest.orm.yml │ │ │ ├── Email.Email.orm.yml │ │ │ └── Delivery.AttemptedDelivery.orm.yml │ ├── security.yml │ ├── config_test.yml │ ├── config.yml │ └── services.yml ├── .htaccess ├── autoload.php └── AppKernel.php ├── infrastructure ├── php-fpm │ ├── php-fpm.conf │ └── www.conf ├── scripts │ └── install-composer.sh └── nginx │ ├── vhost.conf │ └── nginx.conf ├── src ├── AppBundle │ ├── AppBundle.php │ ├── Messenger │ │ ├── SpoolTransportFactory.php │ │ ├── SpoolTransport.php │ │ └── SpoolTransportEventSubscriber.php │ └── Controller │ │ ├── IndexController.php │ │ ├── ErrorController.php │ │ └── DeliveryAttemptController.php └── Outstack │ ├── Enveloper │ ├── Domain │ │ ├── Resolution │ │ │ ├── Templates │ │ │ │ ├── TemplateLoader.php │ │ │ │ ├── TemplateLanguage.php │ │ │ │ ├── Pipeline │ │ │ │ │ ├── TemplatePipeline.php │ │ │ │ │ └── Exceptions │ │ │ │ │ │ └── PipelineFailed.php │ │ │ │ ├── TemplateNotFound.php │ │ │ │ ├── AttachmentListTemplate.php │ │ │ │ ├── ParticipantListTemplate.php │ │ │ │ ├── ParticipantTemplate.php │ │ │ │ ├── AttachmentTemplate.php │ │ │ │ └── Template.php │ │ │ ├── ParametersFailedSchemaValidation.php │ │ │ ├── AttachmentResolver.php │ │ │ ├── ParticipantResolver.php │ │ │ ├── ParticipantListResolver.php │ │ │ ├── AttachmentListResolver.php │ │ │ └── MessageResolver.php │ │ ├── Delivery │ │ │ ├── DeliveryQueue.php │ │ │ ├── DeliveryMethod.php │ │ │ └── AttemptedDelivery.php │ │ ├── History │ │ │ ├── Exceptions │ │ │ │ ├── EmailRequestNotFound.php │ │ │ │ └── DeliveryAttemptNotFound.php │ │ │ └── EmailDeliveryLog.php │ │ └── Email │ │ │ ├── Participants │ │ │ ├── EmailAddressNotValid.php │ │ │ ├── EmailAddress.php │ │ │ ├── ParticipantList.php │ │ │ └── Participant.php │ │ │ ├── Attachments │ │ │ ├── Attachment.php │ │ │ └── AttachmentList.php │ │ │ ├── EmailRequest.php │ │ │ └── Email.php │ ├── Infrastructure │ │ ├── Delivery │ │ │ ├── DeliveryMethod │ │ │ │ └── SwiftMailer │ │ │ │ │ ├── SwiftMailerInterface.php │ │ │ │ │ ├── SwiftMailerImplementation.php │ │ │ │ │ ├── SwiftMailerRecordingDecorator.php │ │ │ │ │ ├── SwiftMailerFactory.php │ │ │ │ │ └── SwiftMailerDeliveryMethod.php │ │ │ └── DeliveryQueue │ │ │ │ └── SymfonyMessenger │ │ │ │ ├── SymfonyMessengerDeliveryQueue.php │ │ │ │ └── SymfonyMessengerDeliveryQueueHandler.php │ │ ├── Resolution │ │ │ ├── TemplateLoader │ │ │ │ └── Filesystem │ │ │ │ │ ├── Exceptions │ │ │ │ │ └── InvalidConfigurationException.php │ │ │ │ │ ├── ConfigurationParser │ │ │ │ │ └── TemplateConfiguration.php │ │ │ │ │ └── FilesystemLoader.php │ │ │ ├── TemplateLanguage │ │ │ │ └── Twig │ │ │ │ │ ├── TwigEnveloperExtension.php │ │ │ │ │ └── TwigTemplateLanguage.php │ │ │ └── TemplatePipeline │ │ │ │ ├── Twig │ │ │ │ └── TwigTemplatePipeline.php │ │ │ │ ├── TemplatePipelineFactory.php │ │ │ │ └── Pipeprint │ │ │ │ └── PipeprintPipeline.php │ │ └── History │ │ │ └── EmailDeliveryLog │ │ │ └── DoctrineOrm │ │ │ ├── ParticipantListType.php │ │ │ ├── ParticipantType.php │ │ │ └── DoctrineOrmEmailDeliveryLog.php │ └── Application │ │ ├── PreviewEmail.php │ │ ├── QueueEmailRequest.php │ │ └── AttemptDelivery.php │ └── Components │ ├── ApiProvider │ └── ApiProblemDetails │ │ ├── ApiProblemFactory.php │ │ └── ApiProblemBuilder.php │ ├── ApiConsumer │ └── ApiClient.php │ ├── SymfonySwiftMailerAssertionLibrary │ └── SwiftMailerAssertionTrait.php │ ├── Framework │ └── AppKernel.php │ ├── HttpInterop │ └── Psr7 │ │ └── ServerEnvironmentRequestFactory.php │ └── SymfonyKernelHttpClient │ └── SymfonyKernelHttpClient.php ├── .gitignore ├── LICENSE.md ├── docker-compose.travis.yml ├── .travis.yml ├── docker-compose.tests.yml ├── test_travis.sh ├── test.sh ├── Dockerfile.docs ├── phpunit.xml.dist ├── docker-compose.dev.yml ├── web └── app.php ├── bin └── console ├── config └── bundles.php ├── docker-compose.yml ├── composer.json ├── Dockerfile └── README.md /var/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/api/build/.gitignore: -------------------------------------------------------------------------------- 1 | *.openapi 2 | -------------------------------------------------------------------------------- /docs/api/build/model/.gitignore: -------------------------------------------------------------------------------- 1 | *.openapi 2 | -------------------------------------------------------------------------------- /docs/api/build/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.openapi 2 | -------------------------------------------------------------------------------- /docs/api/build/endpoints/outbox/.gitignore: -------------------------------------------------------------------------------- 1 | *.openapi 2 | -------------------------------------------------------------------------------- /docs/api/build/resources/errors/.gitignore: -------------------------------------------------------------------------------- 1 | *.openapi 2 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | var/* 2 | vendor/* 3 | docs/api/node_modules/* -------------------------------------------------------------------------------- /docs/api/build/endpoints/outbox/preview/.gitignore: -------------------------------------------------------------------------------- 1 | *.openapi 2 | -------------------------------------------------------------------------------- /docs/examples/hello-world/hello-world.text.twig: -------------------------------------------------------------------------------- 1 | Hello, {{ name }} -------------------------------------------------------------------------------- /tests/data/templates/_includes/example-include.twig: -------------------------------------------------------------------------------- 1 | Included file 2 | -------------------------------------------------------------------------------- /tests/data/templates/mjml-example/mjml-example.text.twig: -------------------------------------------------------------------------------- 1 | Hello, {{ name }} -------------------------------------------------------------------------------- /schemata/model/template-parameters.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object" 3 | } -------------------------------------------------------------------------------- /tests/data/templates/new-user-welcome/new-user-welcome.text.twig: -------------------------------------------------------------------------------- 1 | Hey, welcome {{ user.email }} -------------------------------------------------------------------------------- /tests/data/templates/simplest-test-message/simplest-test-message.text.twig: -------------------------------------------------------------------------------- 1 | Hello, {{ name }} -------------------------------------------------------------------------------- /tests/integration/pipeprint/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker-compose up -d 5 | -------------------------------------------------------------------------------- /tests/data/templates/message-with-static-attachments/static-attachment.txt: -------------------------------------------------------------------------------- 1 | static attachment content -------------------------------------------------------------------------------- /tests/data/templates/message-with-attachments/message-with-attachments.text.twig: -------------------------------------------------------------------------------- 1 | Message with attachments -------------------------------------------------------------------------------- /schemata/endpoints/outbox/post.requestBody.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$ref": "../../model/message-request.schema.json" 3 | } -------------------------------------------------------------------------------- /tests/data/templates/message-with-static-attachments/message-with-static-attachments.text.twig: -------------------------------------------------------------------------------- 1 | Message with attachments -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | nginx: PYTHONUNBUFFERED=true nginx -g 'pid /tmp/nginx.pid; daemon off;' 2 | php: /usr/local/sbin/php-fpm -F 3 | -------------------------------------------------------------------------------- /schemata/endpoints/outbox/preview/post.requestBody.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$ref": "../../../model/message-request.schema.json" 3 | } -------------------------------------------------------------------------------- /tests/data/templates/template-with-include/template-with-include.text.twig: -------------------------------------------------------------------------------- 1 | {% include '_includes/example-include.twig' %} 2 | -------------------------------------------------------------------------------- /docs/examples/hello-world/hello-world.html.twig: -------------------------------------------------------------------------------- 1 | 2 |
3 |Hello, {{ name }}
4 | 5 | -------------------------------------------------------------------------------- /schemata/endpoints/outbox/getSentMessageById.responseBody.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$ref": "../../resources/sent-message.schema.json" 3 | } 4 | -------------------------------------------------------------------------------- /app/AppCache.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |Hello, {{ name }}
4 | 5 |