Ir al contenido

Correo en desarrollo ​

Traducción automática

Esta página se tradujo automáticamente del inglés y todavía no la revisó un hablante nativo; las correcciones son bienvenidas en GitHub. Si algo no coincide, vale el original en inglés.

Tarea: un formulario de contacto que envía un correo al equipo de soporte — y que puedes desarrollar y probar sin un servidor de correo.

Con host: log, q:mail escribe cada mensaje en el log en lugar de enviarlo. La configuración lee el host del entorno, así que en producción solo se define SMTP_HOST:

yaml
# Recipe: mail in development. `host: log` writes each message to the log
# instead of sending it; set SMTP_HOST in production and the same page sends.
paths:
  components: ./components

mail:
  host: ${SMTP_HOST:-log}
  from: support@example.com
xml
<q:component name="Contact">
  <q:action name="send" method="POST">
    <q:param name="email" type="email" required="true" />
    <q:param name="message" required="true" minlength="5" />
    <q:mail to="support@example.com" reply_to="{email}" subject="Contact from {email}" type="text">{message}</q:mail>
    <q:redirect url="/" flash="Thanks! We will answer {email}." />
  </q:action>

  <h1>Contact us</h1>
  <q:if condition="flash"><p class="flash">{flash}</p></q:if>
  <form method="POST" action="/?action=send">
    <input name="email" type="email" />
    <textarea name="message"></textarea>
    <button>Send</button>
  </form>
</q:component>

Las pruebas envían el formulario y verifican lo que se le dice al visitante, y que una dirección mala se rechaza en su campo antes de enviar nada:

xml
<q:test name="a message is sent and the visitor is told" page="/">
  <test:submit action="send" email="ana@example.com" message="Where is my order?" />
  <test:expect redirect="/" flash="Thanks! We will answer ana@example.com." />
</q:test>

<q:test name="an address that is not an e-mail is refused on its field" page="/">
  <test:submit action="send" email="not-an-email" message="Where is my order?" />
  <test:expect error="email" />
</q:test>
text
tests/contact.test.q
  PASS  a message is sent and the visitor is told
  PASS  an address that is not an e-mail is refused on its field
2 passed, 0 failed

Y este es el mensaje que la primera prueba "envió" — lo que escribió host: log:

text
q:mail (host: log, not sent)
From: support@example.com
To: support@example.com
Subject: Contact from ana@example.com

Where is my order?

Sin una sección mail:, q:mail es un error que lo dice — nunca finge que envía. Más en Files & Mail (en inglés).

Probado: esta página importa los archivos de examples/cookbook/files-and-mail/mail-in-development/, y los resultados de arriba vienen de ejecutarlos.

Licencia MIT · Hecho con VitePress