Mail From
Provides an SES domain MAIL FROM resource.
NOTE: For the MAIL FROM domain to be fully usable, this resource should be paired with the aws.ses.DomainIdentity resource. To validate the MAIL FROM domain, a DNS MX record is required. To pass SPF checks, a DNS TXT record may also be required. See the Amazon SES MAIL FROM documentation for more information.
Example Usage
Domain Identity MAIL FROM
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
// Example SES Domain Identity
const exampleDomainIdentity = new aws.ses.DomainIdentity("example", {domain: "example.com"});
const example = new aws.ses.MailFrom("example", {
domain: exampleDomainIdentity.domain,
mailFromDomain: pulumi.interpolate`bounce.${exampleDomainIdentity.domain}`,
});
// Example Route53 MX record
const exampleSesDomainMailFromMx = new aws.route53.Record("example_ses_domain_mail_from_mx", {
zoneId: exampleAwsRoute53Zone.id,
name: example.mailFromDomain,
type: aws.route53.RecordType.MX,
ttl: 600,
records: ["10 feedback-smtp.us-east-1.amazonses.com"],
});
// Example Route53 TXT record for SPF
const exampleSesDomainMailFromTxt = new aws.route53.Record("example_ses_domain_mail_from_txt", {
zoneId: exampleAwsRoute53Zone.id,
name: example.mailFromDomain,
type: aws.route53.RecordType.TXT,
ttl: 600,
records: ["v=spf1 include:amazonses.com -all"],
});Content copied to clipboard
import pulumi
import pulumi_aws as aws
# Example SES Domain Identity
example_domain_identity = aws.ses.DomainIdentity("example", domain="example.com")
example = aws.ses.MailFrom("example",
domain=example_domain_identity.domain,
mail_from_domain=example_domain_identity.domain.apply(lambda domain: f"bounce.{domain}"))
# Example Route53 MX record
example_ses_domain_mail_from_mx = aws.route53.Record("example_ses_domain_mail_from_mx",
zone_id=example_aws_route53_zone["id"],
name=example.mail_from_domain,
type=aws.route53.RecordType.MX,
ttl=600,
records=["10 feedback-smtp.us-east-1.amazonses.com"])
# Example Route53 TXT record for SPF
example_ses_domain_mail_from_txt = aws.route53.Record("example_ses_domain_mail_from_txt",
zone_id=example_aws_route53_zone["id"],
name=example.mail_from_domain,
type=aws.route53.RecordType.TXT,
ttl=600,
records=["v=spf1 include:amazonses.com -all"])Content copied to clipboard
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
// Example SES Domain Identity
var exampleDomainIdentity = new Aws.Ses.DomainIdentity("example", new()
{
Domain = "example.com",
});
var example = new Aws.Ses.MailFrom("example", new()
{
Domain = exampleDomainIdentity.Domain,
MailFromDomain = exampleDomainIdentity.Domain.Apply(domain => $"bounce.{domain}"),
});
// Example Route53 MX record
var exampleSesDomainMailFromMx = new Aws.Route53.Record("example_ses_domain_mail_from_mx", new()
{
ZoneId = exampleAwsRoute53Zone.Id,
Name = example.MailFromDomain,
Type = Aws.Route53.RecordType.MX,
Ttl = 600,
Records = new[]
{
"10 feedback-smtp.us-east-1.amazonses.com",
},
});
// Example Route53 TXT record for SPF
var exampleSesDomainMailFromTxt = new Aws.Route53.Record("example_ses_domain_mail_from_txt", new()
{
ZoneId = exampleAwsRoute53Zone.Id,
Name = example.MailFromDomain,
Type = Aws.Route53.RecordType.TXT,
Ttl = 600,
Records = new[]
{
"v=spf1 include:amazonses.com -all",
},
});
});Content copied to clipboard
package main
import (
"fmt"
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ses"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
// Example SES Domain Identity
exampleDomainIdentity, err := ses.NewDomainIdentity(ctx, "example", &ses.DomainIdentityArgs{
Domain: pulumi.String("example.com"),
})
if err != nil {
return err
}
example, err := ses.NewMailFrom(ctx, "example", &ses.MailFromArgs{
Domain: exampleDomainIdentity.Domain,
MailFromDomain: exampleDomainIdentity.Domain.ApplyT(func(domain string) (string, error) {
return fmt.Sprintf("bounce.%v", domain), nil
}).(pulumi.StringOutput),
})
if err != nil {
return err
}
// Example Route53 MX record
_, err = route53.NewRecord(ctx, "example_ses_domain_mail_from_mx", &route53.RecordArgs{
ZoneId: pulumi.Any(exampleAwsRoute53Zone.Id),
Name: example.MailFromDomain,
Type: pulumi.String(route53.RecordTypeMX),
Ttl: pulumi.Int(600),
Records: pulumi.StringArray{
pulumi.String("10 feedback-smtp.us-east-1.amazonses.com"),
},
})
if err != nil {
return err
}
// Example Route53 TXT record for SPF
_, err = route53.NewRecord(ctx, "example_ses_domain_mail_from_txt", &route53.RecordArgs{
ZoneId: pulumi.Any(exampleAwsRoute53Zone.Id),
Name: example.MailFromDomain,
Type: pulumi.String(route53.RecordTypeTXT),
Ttl: pulumi.Int(600),
Records: pulumi.StringArray{
pulumi.String("v=spf1 include:amazonses.com -all"),
},
})
if err != nil {
return err
}
return nil
})
}Content copied to clipboard
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.ses.DomainIdentity;
import com.pulumi.aws.ses.DomainIdentityArgs;
import com.pulumi.aws.ses.MailFrom;
import com.pulumi.aws.ses.MailFromArgs;
import com.pulumi.aws.route53.Record;
import com.pulumi.aws.route53.RecordArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
// Example SES Domain Identity
var exampleDomainIdentity = new DomainIdentity("exampleDomainIdentity", DomainIdentityArgs.builder()
.domain("example.com")
.build());
var example = new MailFrom("example", MailFromArgs.builder()
.domain(exampleDomainIdentity.domain())
.mailFromDomain(exampleDomainIdentity.domain().applyValue(domain -> String.format("bounce.%s", domain)))
.build());
// Example Route53 MX record
var exampleSesDomainMailFromMx = new Record("exampleSesDomainMailFromMx", RecordArgs.builder()
.zoneId(exampleAwsRoute53Zone.id())
.name(example.mailFromDomain())
.type("MX")
.ttl("600")
.records("10 feedback-smtp.us-east-1.amazonses.com")
.build());
// Example Route53 TXT record for SPF
var exampleSesDomainMailFromTxt = new Record("exampleSesDomainMailFromTxt", RecordArgs.builder()
.zoneId(exampleAwsRoute53Zone.id())
.name(example.mailFromDomain())
.type("TXT")
.ttl("600")
.records("v=spf1 include:amazonses.com -all")
.build());
}
}Content copied to clipboard
resources:
example:
type: aws:ses:MailFrom
properties:
domain: ${exampleDomainIdentity.domain}
mailFromDomain: bounce.${exampleDomainIdentity.domain}
# Example SES Domain Identity
exampleDomainIdentity:
type: aws:ses:DomainIdentity
name: example
properties:
domain: example.com
# Example Route53 MX record
exampleSesDomainMailFromMx:
type: aws:route53:Record
name: example_ses_domain_mail_from_mx
properties:
zoneId: ${exampleAwsRoute53Zone.id}
name: ${example.mailFromDomain}
type: MX
ttl: '600'
records: # Change to the region in which `aws_ses_domain_identity.example` is created
- 10 feedback-smtp.us-east-1.amazonses.com
# Example Route53 TXT record for SPF
exampleSesDomainMailFromTxt:
type: aws:route53:Record
name: example_ses_domain_mail_from_txt
properties:
zoneId: ${exampleAwsRoute53Zone.id}
name: ${example.mailFromDomain}
type: TXT
ttl: '600'
records:
- v=spf1 include:amazonses.com -allContent copied to clipboard
Email Identity MAIL FROM
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
// Example SES Email Identity
const example = new aws.ses.EmailIdentity("example", {email: "user@example.com"});
const exampleMailFrom = new aws.ses.MailFrom("example", {
domain: example.email,
mailFromDomain: "mail.example.com",
});Content copied to clipboard
import pulumi
import pulumi_aws as aws
# Example SES Email Identity
example = aws.ses.EmailIdentity("example", email="user@example.com")
example_mail_from = aws.ses.MailFrom("example",
domain=example.email,
mail_from_domain="mail.example.com")Content copied to clipboard
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
// Example SES Email Identity
var example = new Aws.Ses.EmailIdentity("example", new()
{
Email = "user@example.com",
});
var exampleMailFrom = new Aws.Ses.MailFrom("example", new()
{
Domain = example.Email,
MailFromDomain = "mail.example.com",
});
});Content copied to clipboard
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ses"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
// Example SES Email Identity
example, err := ses.NewEmailIdentity(ctx, "example", &ses.EmailIdentityArgs{
Email: pulumi.String("user@example.com"),
})
if err != nil {
return err
}
_, err = ses.NewMailFrom(ctx, "example", &ses.MailFromArgs{
Domain: example.Email,
MailFromDomain: pulumi.String("mail.example.com"),
})
if err != nil {
return err
}
return nil
})
}Content copied to clipboard
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.ses.EmailIdentity;
import com.pulumi.aws.ses.EmailIdentityArgs;
import com.pulumi.aws.ses.MailFrom;
import com.pulumi.aws.ses.MailFromArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
// Example SES Email Identity
var example = new EmailIdentity("example", EmailIdentityArgs.builder()
.email("user@example.com")
.build());
var exampleMailFrom = new MailFrom("exampleMailFrom", MailFromArgs.builder()
.domain(example.email())
.mailFromDomain("mail.example.com")
.build());
}
}Content copied to clipboard
resources:
# Example SES Email Identity
example:
type: aws:ses:EmailIdentity
properties:
email: user@example.com
exampleMailFrom:
type: aws:ses:MailFrom
name: example
properties:
domain: ${example.email}
mailFromDomain: mail.example.comContent copied to clipboard
Import
Using pulumi import, import MAIL FROM domain using the domain attribute. For example:
$ pulumi import aws:ses/mailFrom:MailFrom example example.comContent copied to clipboard
Properties
Link copied to clipboard
The action that you want Amazon SES to take if it cannot successfully read the required MX record when you send an email. Defaults to UseDefaultValue. See the SES API documentation for more information.