5. Examples

This is an example how to use curl to inject a basic message with a text and html part as well as a custom header.
curl http://127.0.0.1:80/v1/submission \
-H "Content-Type: application/json" \
-H "X-API-Key: badsecret" \
-d @- << EOF
{
    "sender": {
        "localpart": "bounces",
        "domain": "example.com"
    },
    "recipients": [
        {
            "localpart": "john",
            "domain": "example.net"
        }
    ],
    "message": {
        "from": "Example <[email protected]>",
        "subject": "Hello World",
        "text": "Hello World",
        "html": "<html><body><b>Hello World</b></body></html>",
        "headers": {
            "X-Custom-Header": "My custom header"
        }
    }
}
EOF
This is an example how to use curl to inject a message with text substitutions for two recipients.
curl http://127.0.0.1:80/v1/submission \
-H "Content-Type: application/json" \
-H "X-API-Key: badsecret" \
-d @- << EOF
{
    "sender": {
        "localpart": "bounces",
        "domain": "example.com"
    },
    "recipients": [
        {
            "localpart": "john",
            "domain": "example.net",
            "substitutions": {
                "name": {
                    "first": "John",
                    "last": "Doe"
                }
            }
        },
        {
            "localpart": "jane",
            "domain": "example.net",
            "substitutions": {
                "name": {
                    "first": "Jane",
                    "last": "Doe"
                }
            }
        }
    ],
    "message": {
        "from": "Example <[email protected]>",
        "subject": "Hello {{ name.first }}",
        "text": "Hello {{ name.first }}",
        "html": "<html><body><b>Hello {{ name.first }} {{ name.last }}</b></body></html>"
    }
}
EOF
This is an example how to use curl to inject a message with a text part, html part and an attachment.
curl http://127.0.0.1:80/v1/submission \
-H "Content-Type: application/json" \
-H "X-API-Key: badsecret" \
-d @- << EOF
{
    "sender": {
        "localpart": "bounces",
        "domain": "example.com"
    },
    "recipients": [
        {
            "localpart": "john",
            "domain": "example.net"
        }
    ],
    "message": {
        "from": "Example <[email protected]>",
        "subject": "Hello World",
        "text": "Hello World",
        "html": "<html><body><b>Hello World</b></body></html>",
        "attachments": [{
            "name": "test.zip",
            "type": "application/zip",
            "data": "UEsDBBQACAAIABhEeFQAAAAAAAAAAAAAAAAIACAAVGVzdC50eHRVVA0AB6AePGKgHjxioB48YnV4CwABBPUBAAAEFAAAAAMAUEsHCAAAAAACAAAAAAAAAFBLAwQUAAgACAAYRHhUAAAAAAAAAACBAQAAEwAgAF9fTUFDT1NYLy5fVGVzdC50eHRVVA0AB6AePGKgHjxiqx48YnV4CwABBPUBAAAEFAAAAGNgFWNnYGJg8E1MVvAPVohQgAKQGAMnEBsxMDD6A2kgn7GRgSjgGBISBGGBdDCCGOg6WaDi/AwM4sn5uXqJBQU5qXohqRUlrnnJ+SmZeekQ/UB5BgEGBimEmpzE4pLS4tSUlMSSVOWAYKg98kDCA2gcQl1uYnIORA5klBQDgyhCrrA0sSgxryQzL5WhtCRN18La0NjEyNDc0sJkjpxNEkjTlQncMhB3irRe6Ths5Jk8nf2X1LFsy1jiggAdFOobGFgYWZsZGScbpiYaWIN9mpJZYs0AAFBLBwj/uAAV1QAAAIEBAABQSwECFAMUAAgACAAYRHhUAAAAAAIAAAAAAAAACAAgAAAAAAAAAAAApIEAAAAAVGVzdC50eHRVVA0AB6AePGKgHjxioB48YnV4CwABBPUBAAAEFAAAAFBLAQIUAxQACAAIABhEeFT/uAAV1QAAAIEBAAATACAAAAAAAAAAAACkgVgAAABfX01BQ09TWC8uX1Rlc3QudHh0VVQNAAegHjxioB48YqsePGJ1eAsAAQT1AQAABBQAAABQSwUGAAAAAAIAAgC3AAAAjgEAAAAA"
        }]
    }
}
EOF
This is an example how to use curl to inject a message with an image embedded in the html part.
curl http://127.0.0.1:80/v1/submission \
-H "Content-Type: application/json" \
-H "X-API-Key: badsecret" \
-d @- << EOF
{
    "sender": {
        "localpart": "bounces",
        "domain": "example.com"
    },
    "recipients": [
        {
            "localpart": "john",
            "domain": "example.net"
        }
    ],
    "message": {
        "from": "Example <[email protected]>",
        "subject": "Hello World",
        "html": "<html><body><img src=\"cid:80a3ddf7-2874-44b9-8e44-33ae575eb95b\" width=\"100\" height=\"100\"></body></html>",
        "attachments": [
            {
                "type": "image/png",
                "cid": "80a3ddf7-2874-44b9-8e44-33ae575eb95b",
                "data": "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"
            }
        ]
    }
}
EOF