Schemafuncties
SchemafunctiesEmail Sender

Email Sender

Included in the “Power Extensions” bundle

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.

De vereiste bevoegdheid instellen voor de Email Sender
De vereiste bevoegdheid instellen voor de 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 _strReplaceMultiple en _sprintf
  • Field to Input om het e-mailadres van de beheerder uit wp_options op 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
  }
}