Email Sender
Verstuur e-mails via de globale mutatie _sendEmail.
Beschrijving
Mutatie _sendEmail verstuurt e-mails door de WordPress-functie wp_mail uit te voeren. Hierdoor wordt de configuratie gebruikt die in WordPress is gedefinieerd voor het versturen van e-mails (zoals de te gebruiken SMTP-provider).
De e-mail kan worden verstuurd met inhoudstype "text" of "HTML", afhankelijk van de waarde van de invoer messageAs (dit is een "oneof" InputObject, zodat slechts één van de eigenschappen kan worden opgegeven).
Om als tekst te versturen, geef je eigenschap messageAs.text op:
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}Om als HTML te versturen, geef je eigenschap messageAs.html op:
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with HTML content"
messageAs: {
html: "<p>Hello world!</p>"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}Globaal veld
_sendEmail is een globaal veld (of, preciezer gezegd, een globale mutatie). Dit betekent dat, als Nested Mutations zijn ingeschakeld, deze mutatie kan worden uitgevoerd op elk type uit het GraphQL-schema (d.w.z. niet alleen in MutationRoot).
Dit is handig voor het doorlopen van een lijst gebruikers en het versturen van een e-mail naar elk van hen (in dit geval wordt de mutatie uitgevoerd in de context van het type User):
mutation {
users {
email
_sendEmail(
input: {
to: $__email
subject: "..."
messageAs: {
text: "..."
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}In combinatie met functies van andere extensies (in dit geval Field to Input en PHP Functions via Schema) kunnen we gepersonaliseerde berichten voor elke gebruiker opstellen:
mutation {
users {
email
displayName
remainingCredits: metaValue(key: "credits")
emailMessage: _sprintf(
string: """
<p>Hello %s!</p>
<p>Your have <strong>%s remaining credits</strong> in your account.</p>
<p><a href="%s">Buy more?</a></p>
""",
values: [
$__displayName,
$__remainingCredits,
"https://mysite.com/buy-credits"
]
)
_sendEmail(
input: {
to: $__email
subject: "Remaining credits"
messageAs: {
html: $__emailMessage
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}
}Vereiste bevoegdheid
De mutatie kan worden beperkt tot gebruikers met een specifieke WordPress-bevoegdheid. Deze instelling wordt geconfigureerd op de pagina Instellingen, onder Plugin Configuration > Email Sender.

Standaard ingesteld op manage_options zodat abonnees de mutatie niet kunnen gebruiken om willekeurige ontvangers te spammen.
Selecteer (any logged-in user) om de bevoegdheidscontrole uit te schakelen.
Verdere voorbeelden
De onderstaande query verstuurt een e-mail naar de beheerder met de inhoud van een bericht (bijv.: kan worden geactiveerd wanneer een nieuw bericht wordt gepubliceerd). Het maakt gebruik van extensies:
- Multiple Query Execution om de query in logische eenheden te verdelen
- Helper Function Collection om het e-mailbericht op te stellen in Markdown en het te converteren naar HTML via
_strConvertMarkdownToHTML - PHP Functions via Schema om dynamisch waarden in het e-mailonderwerp en -bericht in te voegen via velden
_strReplaceMultipleen_sprintf - Field to Input om het e-mailadres van de beheerder uit
wp_optionsop te halen en op te geven
query GetPostData($postID: ID!) {
post(by: {id: $postID}) {
title @export(as: "postTitle")
excerpt @export(as: "postExcerpt")
url @export(as: "postLink")
author {
name @export(as: "postAuthorName")
url @export(as: "postAuthorLink")
}
}
}
query GetEmailData @depends(on: "GetPostData") {
emailMessageTemplate: _strConvertMarkdownToHTML(
text: """
There is a new post by [{$postAuthorName}]({$postAuthorLink}):
**{$postTitle}**: {$postExcerpt}
[Read online]({$postLink})
"""
)
emailMessage: _strReplaceMultiple(
search: ["{$postAuthorName}", "{$postAuthorLink}", "{$postTitle}", "{$postExcerpt}", "{$postLink}"],
replaceWith: [$postAuthorName, $postAuthorLink, $postTitle, $postExcerpt, $postLink],
in: $__emailMessageTemplate
)
@export(as: "emailMessage")
subject: _sprintf(string: "New post created by %s", values: [$postAuthorName])
@export(as: "emailSubject")
}
mutation SendEmail @depends(on: "GetEmailData") {
adminEmail: optionValue(name: "admin_email")
_sendEmail(
input: {
to: $__adminEmail
subject: $emailSubject
messageAs: {
html: $emailMessage
}
}
) {
status
}
}