webForumDet fria alternativet

Urgent: Skicka ASP-genererade mails i Outlook!

ASP

8 svar · 473 visningar · startad av NBT

Medlem sedan jan. 200264 inlägg
Frågan#1

Ännu en gång vänder jag mig till Eliternas elit, då detta är ett så kallat "riks-knas scenario" som jag inte kan knäcka...

Ett system där man matar in kvalitetsavvikelser vill ha en funktion så att de kan skicka ett vanligt e-mail med Ms Outlook till berörda parter - som ska fixa till det som gått snett...

Detta har jag försöka att lösa genom att

<input name="submit" type="button" id="submit" value="Skicka e-postmeddelande till berörd part" onClick = "popup('mailMsg2.asp?caseID=<%=intShowCase%>',200,80);">

Ovanstående kod resulterar i att en Popup kommer upp och man klickar på en länk... Mailet öppnas (ibland) i Ms Outlook. Ibland funkar det fint och ibland funkar det inte alls så fint - text klipps av, saknas eller ett MsOutlook felmeddelande som jag inte kommer ihåg hur det lyder.

mailMsg2.asp
---------------------------------

<!--#include file="func_functions_inc.asp" -->
<!--#include file="db_con_inc.asp" -->

<%

' Hämta info till mailet
intCaseID = Request.QueryString("caseID")

' Mera info
strSQL = "SELECT c.caseInitiated, c.longDescription, c.proposal, s.stationName " & _
"FROM tblCases AS c, tblSubProcess AS sp, tblProcess AS p, tblStation AS s " & _
"WHERE c.caseID = " & intCaseID & _
" AND c.subProcess = sp.subProcessID " & _
"AND sp.processID = p.processID " & _
"AND p.stationID = s.stationID"

Call openCon()
Set objRS = objCon.Execute(strSQL)

If NOT objRS.EOF Then

dtmInit 		= objRS("caseInitiated")
strDescription 	= objRS("longDescription")
strProposal		= objRS("proposal")
dtmProposal		= objRS("proposal")
strStation		= objRS("stationName")

End If
Set objRS = Nothing

' Hämtar lite datum
strSQL = "SELECT * FROM tblAlarms WHERE caseID = " & intCaseID & _
" AND alarmType = 'proposal'"
Set objRS = objCon.Execute(strSQL)

If NOT objRS.EOF Then

dtmProposal		= objRS("alarmDate")

End If
Set objRS = Nothing

' Mera datum
strSQL = "SELECT * FROM tblAlarms WHERE caseID = " & intCaseID & _
" AND alarmType = 'bekräfta'"
Set objRS = objCon.Execute(strSQL)

If NOT objRS.EOF Then

dtmConfirm		= objRS("alarmDate")

Else

dtmConfirm		= "Berörd part har bekräftat!"

End If
Set objRS = Nothing

'*** Lista kontaktpersoner

strSQL = "SELECT s.name, s.email FROM tblSystemUsers AS s, tblCaseUser AS cu " & \_
	 "WHERE cu.caseID = " & intCaseID & \_
	 " AND cu.uid = s.uid"
Call openCon()
Set objRS = objCon.Execute(strSQL)

Do Until objRS.EOF

	strKontakt = strKontakt & objRS("name") & " (" & objRS("email") & ")"
	objRS.MoveNext
	If NOT objRS.EOF Then strKontakt = strKontakt & ", "

Loop
closeCon()
Set objRS = Nothing

strSQL = "SELECT name FROM tblSystemUsers " & \_
	 "WHERE uid = '" & Session("uid") & "'"
Call openCon()
Set objRS = objCon.Execute(strSQL)

Call closeCon()
Set objRS = Nothing

Set objMess = nothing

%>

<!-- HÄR BÖRJAS GENERERINGEN AV MAILET !!! -->

<a enctype="text/plain" href="mailto:

<%
' *** Här nedan listar vi upp alla e-postmottagare som är berörda av aktuellt ärende

			strSQL = "SELECT cp.email FROM tblConcernedPart AS cp, tblConCases AS cc " & \_
			"WHERE cc.conID = cp.conID AND cc.caseID = " & intCaseID
			Call openCon()
			Set objPartEmail = objCon.Execute(strSQL)

			Do Until objPartEmail.EOF

			strEmail = objPartEmail("email")
			Response.Write(strEmail & ";")
				objPartEmail.MoveNext

			Loop
				closeCon()
			Set objPartEmail = Nothing

%>

<%
' *** Här nedan skickar vi två dolda kopior av mailet till Gerth och Björn
%>

?BCC=fly@xxx.se;gem@xxx.se

&Subject=

UI: CQC Quality System Report gällande AWB-nummer:%20

<% strSQL = "SELECT awbNO FROM tblCaseAwbs WHERE caseID = " & intCaseID
Call openCon()
Set objAwb = objCon.Execute(strSQL)

			Do Until objAwb.EOF
			
				strAwb = objAwb("awbNO")
				Response.Write(strAwb & "%20 %20")
				objAwb.MoveNext
				
			Loop
			Call closeCon()
			Set objAwb = Nothing %\>

&Body=
PÅ STATION ' <%=strStation%> ' HAR FÖLJANDE AVVIKELSE ÄGT RUM:
%250A %250A %250A

AWB-NUMMER:
%250A

\<% strSQL = "SELECT awbNO FROM tblCaseAwbs WHERE caseID = " & intCaseID
			Call openCon()
			Set objAwb = objCon.Execute(strSQL)
			
			Do Until objAwb.EOF
			
				strAwb = objAwb("awbNO")
				Response.Write(strAwb & "%20")
				objAwb.MoveNext
				
			Loop
			Call closeCon()
			Set objAwb = Nothing 
			%\>

%250A %250A %250A

BESKRIVNING AV AKTUELLT ÄRENDE:%250A
<%=fixMailText(strDescription)%>%250A %250A %250A

CQC:s ÅTGÄRDSFÖRSLAG ÄR FÖLJANDE:%250A
<%=fixMailText(strProposal)%>%250A %250A %250A

CQC VILL HA DITT ÅTGÄRDSFÖRSLAG SENAST DEN: <%=dtmProposal%>%250A %250A %250A %250A

Med vänliga hälsningar%250A
<%=strKontakt%>%250A
Central Quality Control%250A
Telefon: %250A
Telefax:">

<font face="arial" size="2" color="red">
Skicka e-postmeddelande till berörd part</font></a>

func_functions_inc.asp
---------------------------------
' En funktion som snyggar till mailtext som skrivs ut från databasen
Function fixMailText(strText)

Set objRe = New regExp
objRe.IgnoreCase = True
objRe.Global = True

objRe.Pattern = "<[^>]*>"
x = objRe.Replace(x," ")

strText		= Replace(strText,vbCrlf,"%250A")

fixMailText		= strText

End Function

Det går inte att säga vart, när eller hur mailet bryts. Det är olika från gång till gång. Mestadels bryts informationsmängden i mailet när det är ganska mycket text som skall matas in i mailet.
Vad är det som är fel?

Jag är inte i dethär läget intresserad av att generera några HTML-baserade e-postmeddelanden. Jag är inte ens säker på om det går att göra i Ms Outlook 2000?
Någon har tidigare sagt att jag inte skall använda mig av "server.HTMLEncode" ?

http://www.webforum.nu/showthread.php?s=&postid=496794#post496794

Extremt tacksam för snabb feedback!

Medlem sedan aug. 20012 349 inlägg
#2

Ett problem kan ju vara att en querystring inte kan vara hur lång som helst, max 255 tecken eller nått (kommer inte ihåg riktigt)...

Medlem sedan jan. 200264 inlägg
#3

Överlag, efter att ha testat olika varianter intensivt i ett par timmar nu, så har vi väl kommit fram till att mailet bryts efter x antal tecken. Vi har också lyckats felsöka till att innehållet i mailet bryts efter x antal tecken under nedanstående kodsnutt.

mailMsg2.asp
CQC:s ÅTGÄRDSFÖRSLAG ÄR FÖLJANDE:%250A
<%=fixMailText(strProposal)%>%250A %250A %250A

Konkret exempel ur ovanstående kodsnutt:
CQC:s ÅTGÄRDSFÖRSLAG ÄR FÖLJANDE:

1.
Det bästa vore ju naturligtvis om GOT kunde göra sändningarna definitiva när dom vet avgångstiden. Sändningarna preliminärbokas kvällen innan och definitivbokas på morgonen när man vet avgångstiden. Går det in

Där det är rödmarkerat bryts mailet, i detta fallet...

Finns det något sätt att reglera detta så att man kan "tvinga" Outlook att ta in obegränsat med information?

Kan man tvinga en querystring att vara längre än 255 tecken om det nu skulle vara det som är fel?

Finns det något annat sätt att lösa denna problematik på?

Medlem sedan aug. 20012 349 inlägg
#4

Det här är ju en tråkig kommentar jag lägger nu men... vore det inte bättre att sända mailt med hjälp av en komponent, då borde du slippa alla de här problemen.

Du kan ju sätta avsändaren till den som sänder mailet om det är någon som är inloggad i ett system, han har väl användaruppgifter sparade.

Vad är tanken med att det måste vara ett mail som poppar upp från outlook, borde väl gå lika bra med att mail som genererats på servern och sänds iväg.

Jag tror inte att det går att på något sätt tvinga iis:en att acceptera längre querystrings.

Parantes: med post kan man ha runt 103 000 tecken, det har jag testat :)

Medlem sedan jan. 200264 inlägg
#5

Anledningen till att man vill ha upp mailet i Outlook är att man vill kunna

*** redigera mailen innan man skickar iväg dem
* spara dem i sin "Skickat-mapp" i Outlook
* Kunna bifoga filer, ex. XLS-filer, DOC osv.

mm...**

På något sätt måste det väl gå att lösa tycker jag? :OO

Medlem sedan mars 20015 287 inlägg
#6

Kan man tvinga en querystring att vara längre än 255 tecken om det nu skulle vara det som är fel?

Lösningen på det problemet är väl given:

Parantes: med post kan man ha runt 103 000 tecken, det har jag testat

Medlem sedan juni 20022 599 inlägg
#7

Om begränsningen är antalet tecken som går att överföra till Outlook så finns det kanske en annan lösning.

1. Skapa en .eml-fil på servern som innehåller själva mailet.

2. Streama mailfilen till klienten med ADODB.Stream-objektet.

3. Om du satt: ContentType="application/eml" så borde filen vara associerad med Outlook och öppnas i denna. (Begränsningen på antalet tecken är nu borta eftersom datan inte överförs via en länk.)

Det känns lite krångligt och jag har inga exempel. Men som sagt hittar du inget annat så ..?

Läs:
http://www.4guysfromrolla.com/webtech/083100-1.shtml

Medlem sedan jan. 200264 inlägg
#8

hmm... Går det verkligen inte att lösa på nåt sätt?
Nu måste jag käka lite, har glömt bort att käka lunch =) Får bli en Statoilkorv eller nått =)

Medlem sedan aug. 20012 349 inlägg
#9

* redigera mailen innan man skickar iväg dem
* spara dem i sin "Skickat-mapp" i Outlook
* Kunna bifoga filer, ex. XLS-filer, DOC osv.

Redigera innan går ju bra, putta ut mailtexteni en textareafält och låt användaren redigera bästan han vill. Sen är det ju bara att posta det til sidan som bygger mailet och sänder iväg med en komponent.

Spara i sin skickat-mapp, sänd en kopia till han som sänder mailet, så får han en kopia iallafall.

Bifoga filer måste ju gå med, bara att ladda upp en fil och sen attacha den till mailet, det går med all säkerhet med Jmail eller någon annan mail komponent, allt annat skule förvåna mig.

Jag håller med om att det inte kasnke är lika smidigt som att ha ett fint outlook mail direkt, men det är en lösning.

Du får försöka fokusera på att lösa problemet, och om det nu inte blir enkelt med outlook så får man göra det på något annat sätt.

274 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)