Email Sender
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.

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