Hoppa till innehåll

Sida 1 av 1
  • Du kan inte starta en ny tråd
  • Du kan inte svara i tråden

Stränghantering i HTML-kodade e-post-meddelande

#1
Medlem är utloggad   Vombo 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 32
  • Gick med: 2001-04-30
  • Ort:Vintrosa

Skrivet 27 jan 2013, 21:48

Jag har ett problem. Jag vill skicka i väg ett HTML-formaterat e-post meddelande genom CreateObject("CDO.Message"). I strängen Meddelande lagras all informationen, text och HTML-kod. När strängen skrivs ut i webbläsaren genom Response.Write, blir det inte några problem med den. När den skrivs in i e-post-meddelandet, infogas olika tecken(!, ', mellanslag, <, > etc.) som stör HTML-koden i e-posten.
Dessa tecken infogas slumpvis mellan olika delar av strängens sammansättning samt i mitten av text utan att jag kan påverka den överhuvudtaget. Finns det någon encode eller liknande som jag behöver använda mig av för att undvika problemet?


Själva e-postkoden ser ut så här i ASP:

Set myMail=CreateObject("CDO.Message")
myMail.Subject= "Almanackan"
myMail.From="namn@domannamn.se"
myMail.To="namn@domannamn.se"
myMail.HTMLBody= Meddelande
myMail.Send
set myMail=nothing

0

#2
Medlem är utloggad   Cluster 

  • Omniscient
  • Ikon
  • Grupp: Moderatorer
  • Inlägg: 7 837
  • Gick med: 2000-08-08

Skrivet 28 jan 2013, 10:21

Blir nog enklare om du även visar hur du bygger upp strängen Meddelande

Tänk även på att det gäller att ha samma teckenkodningstabell i alla inblandade delar, se t.ex tråden http://eforum.idg.se...ch-aao-problem/

0

#3
Medlem är utloggad   Vombo 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 32
  • Gick med: 2001-04-30
  • Ort:Vintrosa

Skrivet 28 jan 2013, 21:00

Här är en del av koden. Den är ganska rörig och är tätt sammanflätad med SQL-kod och sorteringsfunktioner.

Jag sparar filen i ANSI och använder windows-1252.

När jag har testat att skicka e-posten till en linux-baserad e-postserver blir det inga problem, men när jag skickar exakt samma kod till en exchange-låda uppstår alla de olika extra-tecknen och förskjutningar.

<%
TblStart = "<table cellpadding=3 cellspacing=0 width=600>"
	TblRad = "<tr>"
	TblRadLinje = "<tr>"
		TblCell = "<td valign=top>"
		TblCellLinje = "<td class=linje valign=top>"
		TblCellSpan4 = "<td colspan=4 valign=top>"
		TblCellFet = "<td class=fet  valign=top>"
		TblCellRubrik = "<td class=r1  valign=top>"	 
		TblCellAvslut = "</td>"
	TblRadAvslut = "</tr>"
TblSlut = "</table>"

StyckeRubrik = "<p class=r2>"
Text = "<p class=text>"

' Den här filen används av andring.asp & KommandeBokningar.asp
		rs.Open sql, Connect
			if NOT rs.BOF AND NOT rs.EOF then
				Meddelande = Meddelande2 & TblStart
				id = rs("QQ_Id")
				forst = TRUE
				InomSammaCell_Forst = True
				do until rs.EOF
					Meddelande = Meddelande & TblRad
					for each x in rs.Fields
						if x.value <> "" AND Left(x.name,3) <> "QQ_" then
							
							if NOT InomSammaCell_Forst AND Komihag <> Left(x.Name,4) Then 
								Meddelande = Meddelande & TblCellAvslut & TblRadAvslut 
								InomSammaCell_Forst = True 
							End if 
							select case Left(x.Name,4)
								case "Hand"
									If x.Name = "Handelse" then Meddelande = Meddelande & TblRad & TblCellFet &  chr(32) & TblCellAvslut & TblCellRubrik  & x.value & TblCellAvslut & TblRadAvslut
									InomSammaCell_Forst = True
								case "Maka", "Make", "Avli", "Anho", "Kont", "Star"
									If InomSammaCell_Forst Then	Meddelande = Meddelande & TblRad & TblCellFet & _
										replace(x.name,"_", " ") & TblCellAvslut & TblCell 
									Meddelande = Meddelande & x.value 
									If NOT IsEmpty(x.value) Then Meddelande = Meddelande & chr(32)
									InomSammaCell_Forst = False
								case else
									Meddelande = Meddelande & TblRad & TblCellFet & _
										replace(x.name,"_", " ") & TblCellAvslut
									Meddelande = Meddelande & TblCell & visaradbryt_br(x.value) &  TblCellAvslut & TblRadAvslut
									InomSammaCell_Forst = True
							end select
							Komihag = Left(x.Name,4)
						end if
					next
					if NOT InomSammaCell_Forst Then 
						Meddelande = Meddelande & TblCellAvslut & TblRadAvslut 
						InomSammaCell_Forst = True 
					End If
							
					sqlt = " AND Resbokning.BokId = " & rs("QQ_id")
					
					for c=1 to 2
						if c=1 then 
							sqltext = hamtatext("/SQL/person.sql") & sqlt
							Meddelande = Meddelande & TblRad & TblCellFet & "Deltagare" & TblCellAvslut
						else 
							sqltext = hamtatext("/SQL/lokal.sql") & sqlt
							rsX.Open sqltext, ConnectX
								if NOT (rsX.BOF AND rsX.EOF) then Meddelande = Meddelande & TblRad & TblCellFet & "Lokal" & TblCellAvslut
							rsX.Close
						end if 
						Meddelande = Meddelande & TblCell
						
						rsX.Open sqltext, ConnectX
						do until rsX.EOF
							if c=1 then 
								Meddelande = Meddelande & Trim(rsX.Fields(1)) & chr(32) 
							else
							
							end if
							if c=2 then Meddelande = Meddelande & Platsforkortning(rsX.Fields(0))& chr(32)
							rsX.MoveNext
						loop
						rsX.Close
						Meddelande = Meddelande & TblCellAvslut
					next
					Meddelande = Meddelande & TblRadAvslut

					id = rs("QQ_Id") 'Kom ihåg förra posten
					rs.MoveNext
				response.Flush	
				loop
				Meddelande = Meddelande & TblSlut
			End If
		rs.Close
	%>

0

#4
Medlem är utloggad   Jonas__B 

  • Stjärna
  • Ikon
  • Grupp: Moderatorer
  • Inlägg: 4 102
  • Gick med: 2006-03-09
  • Ort:Göteborg

Skrivet 29 jan 2013, 14:03

Du får nog implicit sätta teckenkodningen då det antagligen finns defaultinställningar på servern

MyMail.BodyPart.ContentMediaType = "text/html;"
MyMail.BodyPart.Charset = "windows-1252"
Jonas :: Moderator - CD/DVD-bränning, Kameror, Print - om trycksaker samt Bildredigering.

Hjälpte jag dig, eller gillar du det jag skrev?!
Visa din uppskattning genom att klicka på Plus-ikonen till höger ----------------------------------------------------->>
0

#5
Medlem är utloggad   Vombo 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 32
  • Gick med: 2001-04-30
  • Ort:Vintrosa

Skrivet 29 jan 2013, 15:22

Jag har testat era förslag och lite olika lösningar. Problemet är dock fortfarande att Exchange-servern lägger in massor av feltecken mitt inne i den sträng som skickas till Server.CreateObject("CDO.Message").

Jag har kontaktat en administratör som ansvarar för Exchange-servrar och ser vad de kan ge för svar.
0
Sida 1 av 1
  • Du kan inte starta en ny tråd
  • Du kan inte svara i tråden

1 besökare läser just nu den här tråden, varav 0 medlem(mar) och 1 gäst(er)
 
 
Senast obesvarade trådar
Prenumerera på nyheter

Missa inte våra nya
smarta nyhetsbrev

Läs mer om nyhetsbreven här!
Beställ direkt:


Extreme
PC för Alla-nätverket