SMTP: ¿Es posible enviar un CC a alguien sin enviar el original?


24

De hecho, comencé a pensar en esto porque olvidé enviar un correo electrónico a alguien en un correo electrónico que se suponía que debía enviar, y quería que él obtuviera una copia sin enviarlo a todos los demás. Terminé enviándolo a él, pero todavía tengo curiosidad.

¿Dónde se manejan las listas CC y BCC en SMTP? ¿Necesitaría controlar el servidor SMTP, o se puede hacer del lado del cliente?

¡Gracias!

email  smtp 

55
¿Por qué se está rechazando esto? Es una pregunta interesante después de todo ...

55
@Achilles - Los detalles de si esto es posible o no es ABSOLUTAMENTE una pregunta de programación en mi humilde opinión. Está definido en los RFC 2821 y 2822. Al final del día, todos los clientes de correo están programados de acuerdo con estas definiciones, y todos y cada uno de los desarrolladores aquí pueden tener que profundizar en SMTP en algún momento. Ciertamente lo tengo.

3
POR FAVOR, deje de votar para cerrar esto como "pertenece a SuperUser". Solo porque el OP dice que fue la acción de enviar un correo electrónico lo que lo hizo pensar en el problema, no hace que la pregunta real "no esté relacionada con la programación". Si tuviera una pregunta de implementación http que se me ocurrió cuando hice clic en un enlace web, ¿estaría eso "no relacionado con la programación"? No.

Respuestas:


17

En resumen: sí, es posible si puede conectarse directamente al servidor SMTP de los destinatarios. Por las razones que Rup describe en su respuesta , puede que no sea especialmente práctico, y si está en una red detrás de un firewall, es posible que no pueda conectarse a un servidor remoto en el puerto TCP 25.

Suponiendo que esto no se aplica a usted, entonces aquí está el detalle:

Cuando usted (como cliente de correo) se conecta al servidor de correo del destinatario, todo lo que le importa (para fines de entrega) son los destinatarios especificados en RCPT TO:. Consulte RFC2821 - Protocolo simple de transferencia de correo . No diferencia entre el tipo de destinatario (a :, cc: o bcc :), solo sabe que está diciendo "asegúrese de que el destinatario en su servidor reciba esto".

Sin embargo, en lo que respecta al cliente de correo real del destinatario, son los encabezados del mensaje los que dicen quiénes fueron todos los destinatarios del mensaje. Consulte RFC2822 - Formato de mensaje de Internet .

En otras palabras, los encabezados TO :, CC: y BCC: están ahí para beneficio del cliente de correo, mientras que la distribución real se maneja durante la 'conversación' SMTP con los servidores de correo.

De hecho, puede tener una conversación con un servidor SMTP que se parece a esto:

C:>telnet aspmx.l.google.com 25
220 mx.google.com ESMTP f70si17620845wej.110
HELO myserver.mydomain.co.uk
250 mx.google.com at your service
MAIL FROM: <test@mydomain.co.uk>
250 2.1.0 OK f70si17620845wej.110
RCPT TO: <user_i_missed_out@mydomain.co.uk>
250 2.1.5 OK f70si17620845wej.110
DATA
354  Go ahead f70si17620845wej.110
To: recipient_on_original@somewhere.com
cc: another_recipient_on_original@somewhere.com, user_i_missed_out@mydomain.co.uk
Subject: My email

Hi - this is a test
.
250 2.0.0 OK 1277401976 f70si17620845wej.110
QUIT
221 2.0.0 closing connection f70si17620845wej.110


Connection to host lost.

El efecto neto es que user_i_missed_out@mydomain.co.ukrecibe una copia del correo electrónico que lo tiene en la lista de cc, así como el destinatario original recipient_on_original@somewhere.comy el destinatario original de cc another_recipient_on_original@somewhere.com.

Sin embargo, dado que nunca nos conectamos a los servidores de correo de los dos últimos, en realidad no reciben el correo electrónico por segunda vez. Y dado que no podemos cambiar los correos que ya se les han enviado antes, nunca notarán que agregamos otro destinatario cc.


4

Lo que pasa es

  1. Usted envía el correo electrónico a su servidor SMTP local (o ISP)
  2. Su servidor SMTP local expande la lista de destinatarios y calcula la lista de servidores con los que tendrá que hablar para todos los destinatarios. Elimina el encabezado BCC del mensaje.
  3. Para cada servidor, se conecta y dice "Aquí hay un correo electrónico para los destinatarios X, Y: aquí están los encabezados y el cuerpo del mensaje"

es decir, si puede inyectar el correo electrónico en 3, entregarlo directamente en el servidor SMTP de inicio del usuario CC perdido, entonces puede enviarlo CC sin tener que enviar el correo a todos los demás. En particular, un destinatario de BCC recibirá encabezados y cuerpo de mensaje que no los menciona en absoluto (excepto tal vez un encabezado 'X-Envelope-To').

Sin embargo, en términos prácticos, es mucho más fácil enviarlo a todos. Para hacer esto de manera eficiente, necesitaría modificar su cliente de correo electrónico y el servidor SMTP local para admitir una lista de destinatarios falsos, o una lista de exclusión de no enviar realmente, que procesa durante la expansión del destinatario.


2

En realidad, este problema se resuelve mediante un trabajo en progreso IETF existente: la copia cosmética de carbón . Desafortunadamente, no conozco a ningún cliente de correo electrónico que realmente implemente CCC, ya que el borrador es ampliamente considerado como una broma sin sentido para April Fool's Day.

Con toda seriedad, lo que está preguntando es posible, principalmente porque el contenido de un correo electrónico en realidad no afecta a quién se envía el correo en la capa SMTP. Los clientes de correo electrónico se escriben para enviar correo a todos en los campos Para, CC y CCO, pero no están obligados a hacerlo por ningún estándar.

Actualizado: para ser precisos, al enviar correo a un servidor SMTP, el remitente utiliza el comando RCPT para especificar a qué direcciones de correo electrónico debe enviarse un mensaje. Luego envía el contenido del correo con un comando DATA. El servidor SMTP no debería mirar el contenido. Debería ser posible agregar un destinatario a la línea de encabezado CC de un mensaje y pedirle al servidor SMPT que lo entregue a esa única dirección.


0

Si entiendo esto correctamente, lo que está tratando de hacer es enviar un mensaje por segunda vez, incluidos los destinatarios originales en los encabezados Para: y CC: pero solo ese mensaje es recibido por algunos destinatarios adicionales. Como han señalado otras respuestas, su cliente de correo electrónico puede lograr esto comunicándose con el servidor SMTP y especificando solo un destinatario, pero incluyendo los encabezados To: y Cc: del correo electrónico original.

El cliente de Apple Mail tiene una funcionalidad que puede hacer esto de manera efectiva. La función Redirigir se puede encontrar en el menú Mensaje o en el menú contextual de un mensaje. Esta función está diseñada para usarse como una forma transparente de reenviar un correo electrónico a otra persona sin agregar Fwd: a la línea de asunto y aumentar el nivel de presupuesto, pero también se puede usar en mensajes que ha enviado anteriormente. Mantiene los campos To / Cc / From del mensaje original igual y agrega los nuevos destinatarios en los encabezados Resent-To y Resent-CC. Los únicos destinatarios del mensaje reenviado serán los que especifique al redactarlo. No es completamente obvio cómo funciona esto cuando hace uso de la función, así que asegúrese de probarlo de antemano.


-1

Puede permitirse / deshabilitarse cliente por cliente, pero puede intentar poner algo falso (como ";; destinatarios no revelados ;;") en el Para y poner a todos en el BCC. Luego, la repetición del proceso hará que parezca el mismo correo electrónico, siempre y cuando nadie esté mirando lo suficientemente cerca de las marcas de tiempo y mensajes enhebrados y demás.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.