2010-02-23 11 views
8

Tengo un programa donde genero un pequeño documento html con un enlace y lo envío a través de xp_smtp_sendmail proc. El enlace se genera en función de los resultados de la consulta y es largo. Esto funciona en la mayoría de los casos. Sin embargo, a veces el enlace se rompe debido a espacios que se insertan en nombres de variables de cadena de consulta, es decir, & Na me = John.xp_smtp_sendmail espacio en blanco agregado a html aleatoriamente

Esto puede variar entre los clientes de correo electrónico (el mismo enlace funciona en Gmail, pero podría no funcionar en comcast debido a espacios.) El espacio parece estar insertado aleatoriamente, por lo que en cada enlace roto el espacio puede romper otras variables de consulta. do PRINT desde proc el enlace está limpio, sin espacios.

Aquí está mi ejemplo del proceso de correo que se ejecuta dentro del proceso principal (que obtiene resultados de consulta y genera html para @Message). El espacio parece insertarse independientemente de si Codifico la url o no.

Gracias de antemano por su ayuda. Puedo enviar una versión más limpia del código si no se muestra correctamente aquí.

resultados

.... consulta anterior

SET @Message = NULL 
SET @Message = @Message + 
+ '<br/>Dear ' + @FirstName + ' ' + @LastName + ',' 
+ '<br/><br/>Recently you took "' + @Title + '". ' 
+ 'In response to the question "What is it?" ' 
+ 'you responded "' + @Response + '".' 
+ '<br/><br/>Following up on previous mailing' 
+ '<br/><br/>Please click on the link below' 
+ '<br/><br/><a href="' + @Link + '">Please click here</a>' 
+ '<br/><br/>plain text' 
+ '<br/><br/>plain text,' 
+ '<br/><br/>plain text<br/> 
plain text<br/> 
plain text<br/> 
plain text<br/> 
plain text<br/> 
plain text 

EXEC @rc = master.dbo.xp_smtp_sendmail 
@FROM   = '[email protected]', 
@FROM_NAME = 'Any User', 
@TO   = @Email, 
@priority  = N'NORMAL', 
@subject  = N'My email', 
@message  = @Message, 
@messagefile = N'', 
@type   = N'text/html', 
@attachment = N'', 
@attachments = N'', 
@codepage  = 0, 
@server  = 'smtp.server.any' 
+0

... Una vez más, por favor avíseme si arriba aparece funky, ¿puedo enviar una versión limpia de HTML que construyo, –

+0

más adelante? – gbn

Respuesta

0

¿Por cuánto tiempo es el enlace con los valores?

Supongo que se produce algo de envoltura y tiene un salto de línea que cambia a un espacio.

Parece aleatorio porque los valores son diferentes longitudes, por lo que la división ocurre de forma aleatoria.

Otra idea: solo necesita etiquetas <br>. <br /> no es necesario (con o sin espacio) y puede contribuir

+0

Gracias por su respuesta. El enlace tiene aproximadamente 428 caracteres. Lo que es interesante es que el mismo enlace se puede enviar a Gmail (nunca se ha visto un error allí) y a otro cliente de correo electrónico de Comcast (aparecen espacios). Por lo tanto, parece que varía según la forma en que el cliente de correo electrónico lo analiza. Hasta ahora no han sido capaces de resolverlo. Le daré una oportunidad a las etiquetas
tal como me sugirió. ¿Hay alguna otra manera de eliminar el envoltorio potencial? Por favor, avíseme si tiene alguna otra idea. –

+0

podría usar tinyurl o similar para acortar el enlace? – gbn

0

¿Qué le parece colocar los retornos de carro en su codificación. BR solo devolverá el carro en HTML, pero la fuente en sí misma no tiene retornos de carro.

1

1 - Verifique la longitud del mensaje que genera y cambie al envío desde un archivo si la longitud es cercana a 4000 caracteres.

2 - Inyecte caracteres cr/lf antes de cada frase o párrafo.

3 - Asegúrese de que usted tiene cr/lf antes y después de una etiqueta de apertura (o simplemente LF si eso es lo que le gusta servidor SMTP)

4 - Hablar con el que usted tiene que sobre el acortamiento de la longitud de esa incrustado enlace - es sencillo insostenible

5 - Pregunta acerca de las opciones de configuración en el servidor SMTP que le permite enviar correo electrónico tan plenamente codificado binario (requiere cabeceras MIME y codificación Base64)

6 - Buscar un más reciente alternativa a xp_smtp_sendmail, .NET xp quizás

-1

Tu problema es que estás tratando a mai como una página web. El correo se inventó en el momento de las consolas solo de texto, y a menudo tienen un límite de longitud de línea de 72 caracteres. Debe envolver su HTML en líneas que no tengan más de 72 caracteres para garantizar que se entregue correctamente a todos los destinatarios.

Para hacer esto, utilice la codificación imprimible entre comillas y ajuste las líneas a un máximo de 72 caracteres.

Sin embargo, no tengo idea de cómo hacerlo en SQL Server, aparte de escribir un procedimiento para el trabajo.Puede seguir los consejos en el ASP FAQ.

Básicamente lo que dice es acortar el enlace ya sea por trucos o mediante el uso de servicios de acortamiento de enlaces.

Cuestiones relacionadas