Schema Functions
Schema FunctionsEmail Sender

Email Sender

Included in the “Power Extensions” bundle

Envía emails mediante la mutación global _sendEmail.

Descripción

La mutación _sendEmail envía emails ejecutando la función wp_mail de WordPress. Como resultado, usará la configuración definida para enviar emails en WordPress (como el proveedor SMTP a utilizar).

El email puede enviarse con tipos de contenido "text" o "HTML", dependiendo del valor de la entrada messageAs (que es un InputObject "oneof", de modo que solo se puede proporcionar una de sus propiedades).

Para enviar como texto, proporciona la propiedad messageAs.text:

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

Para enviar como HTML, proporciona la propiedad messageAs.html:

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

Campo Global

_sendEmail es un campo global (o, más precisamente, una mutación global). Esto significa que, si las Nested Mutations están habilitadas, esta mutación puede ejecutarse sobre cualquier tipo del esquema GraphQL (es decir, no solo en MutationRoot).

Esto es útil para iterar una lista de usuarios y enviar un email a cada uno de ellos (en este caso, la mutación se dispara estando en el tipo User):

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

Combinado con funcionalidades de otras extensiones (en este caso, Field to Input y PHP Functions via Schema), podemos crear mensajes personalizados para cada usuario:

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

Capacidad requerida

La mutación puede restringirse a usuarios que tengan una capacidad específica de WordPress. Esta opción se configura en la página de Ajustes, en Plugin Configuration > Email Sender.

Estableciendo la capacidad requerida para el Email Sender
Estableciendo la capacidad requerida para el Email Sender

Por defecto es manage_options para que los suscriptores no puedan usar la mutación para hacer spam a destinatarios arbitrarios.

Selecciona (any logged-in user) para deshabilitar la comprobación de capacidad.

Más ejemplos

La consulta de abajo envía un email al usuario admin con el contenido de alguna entrada (por ejemplo: puede dispararse cada vez que se publica una nueva entrada). Usa las extensiones:

  • Multiple Query Execution para gestionar la consulta en unidades lógicas
  • Helper Function Collection para componer el mensaje del email usando Markdown y convertirlo a HTML mediante _strConvertMarkdownToHTML
  • PHP Functions via Schema para inyectar dinámicamente valores en el asunto y mensaje del email mediante los campos _strReplaceMultiple y _sprintf
  • Field to Input para recuperar y proporcionar el email del admin desde wp_options
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
  }
}