Schema-Funktionen
Schema-FunktionenEmail Sender

Email Sender

Included in the “Power Extensions” bundle

E-Mails versenden via globale Mutation _sendEmail.

Beschreibung

Die Mutation _sendEmail versendet E-Mails, indem sie die WordPress-Funktion wp_mail aufruft. Dadurch wird die in WordPress definierte Konfiguration für den E-Mail-Versand genutzt (z. B. welcher SMTP-Anbieter verwendet wird).

Die E-Mail kann mit den Inhaltstypen "text" oder "HTML" versendet werden, abhängig vom Wert des Inputs messageAs (ein "oneof"-InputObject, sodass jeweils nur eine seiner Eigenschaften angegeben werden kann).

Um als Text zu senden, gib die Eigenschaft messageAs.text an:

mutation {
  _sendEmail(
    input: {
      to: "target@email.com"
      subject: "Email with text content"
      messageAs: {
        text: "Hello world!"
      }
    }
  ) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}

Um als HTML zu senden, gib die Eigenschaft messageAs.html an:

mutation {
  _sendEmail(
    input: {
      to: "target@email.com"
      subject: "Email with HTML content"
      messageAs: {
        html: "<p>Hello world!</p>"
      }
    }
  ) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}

Globales Feld

_sendEmail ist ein globales Feld (oder genauer gesagt eine globale Mutation). Das bedeutet: Wenn Nested Mutations aktiviert sind, kann diese Mutation auf jedem Typ des GraphQL-Schemas ausgeführt werden (also nicht nur in MutationRoot).

Das ist nützlich, um eine Liste von Benutzern zu durchlaufen und jedem von ihnen eine E-Mail zu senden (in diesem Fall wird die Mutation im Typ User ausgelöst):

mutation {
  users {
    email
    _sendEmail(
      input: {
        to: $__email
        subject: "..."
        messageAs: {
          text: "..."
        }
      }
    ) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}

In Kombination mit Funktionen anderer Erweiterungen (hier: Field to Input und PHP Functions via Schema) lassen sich personalisierte Nachrichten für jeden Benutzer erstellen:

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
        }
      }
    }
  }
}

Erforderliche Berechtigung

Die Mutation kann auf Benutzer mit einer bestimmten WordPress-Berechtigung eingeschränkt werden. Diese Einstellung wird auf der Einstellungsseite unter Plugin Configuration > Email Sender konfiguriert.

Die erforderliche Berechtigung für den Email Sender festlegen
Die erforderliche Berechtigung für den Email Sender festlegen

Standardmäßig ist manage_options eingestellt, damit Abonnenten die Mutation nicht zum Versenden von Spam an beliebige Empfänger missbrauchen können.

Wähle (any logged-in user), um die Berechtigungsprüfung zu deaktivieren.

Weitere Beispiele

Die folgende Query sendet eine E-Mail an den Administrator-Benutzer mit dem Inhalt eines Beitrags (z. B. kann sie ausgelöst werden, wenn ein neuer Beitrag veröffentlicht wird). Sie verwendet folgende Erweiterungen:

  • Multiple Query Execution um die Query in logische Einheiten zu gliedern
  • Helper Function Collection um die E-Mail-Nachricht mit Markdown zu verfassen und sie via _strConvertMarkdownToHTML in HTML umzuwandeln
  • PHP Functions via Schema um Werte dynamisch in Betreff und Nachricht der E-Mail einzufügen, über die Felder _strReplaceMultiple und _sprintf
  • Field to Input um die E-Mail-Adresse des Administrators aus wp_options abzurufen und bereitzustellen
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
  }
}