Just nu i M3-nätverket
Gå till innehåll

Infoga bild som epostas


NerdTompa

Rekommendera Poster

Jag försöker göra en funktion där man kan bläddra efter en bildfil i den egna datorn och sen infoga den så att den syns bredvid ett formulärfält. Tanken är att sen ska man kunna skicka formulärdata med bild via epost.

Nån som har en aning om hur man gör?

 

[bild bifogad 2005-06-28 12:34:42 av NerdTompa]

724526_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

  • Svars 57
  • Skapad
  • Senaste svar

Nej, jag vill inte attacha den, den ska kunna ses direkt på sidan. Ungefär som att jag väljer en bild från thumbnailpic-sida, men istället lägger upp bild från egen hårddisk.

 

Måste väl gå.....?

 

Länk till kommentar
Dela på andra webbplatser

Som Cechise säger så måste du nog (temporärt) ladda upp den till servern. Sedan får du skapa ett HTML-fomaterat mail utifrån formulärets övriga innehåll.

Du bör även skapa en plaintextversion av mailet för de läsare som inte tillåter visning av HTML-mail. Bilden blir då en bilaga.

 

Om du kör ASP så använder du tex CDOSYS för att skicka mail med både HTML och plaintext body. Säg till (eller sök själv //eforum.idg.se/search.asp) om du behöver hjälp med kod.

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

OK, det verkar som jag inte kommer ifrån det. Synd.

 

Fördelen är att jag är den enda användaren, det kommer ligga på ett intranät på jobbet och jag kommer använda formuläret för att samla in mätuppgifter i ett formulär, bifoga en detaljbild (GIF) och maila det hela till en annan på företaget som administrerar väredna. Bilden ska vara för att visa var mätningarna är gjorda.

 

Lite invecklat, men.... Jag är inte webbare, jag är ingenjör....:)

 

Tacksam för ev. förslag.

 

Mvh

 

/NT

 

Länk till kommentar
Dela på andra webbplatser

precis.

 

Skapa ett uploadskript som laddar upp bilden användaren väljer och visar den i formuläret. När användaren sedan fyllt i färdigt å klickar på skicka så bäddar du in/attachar bilden i mailet och skickar iväg. Sen tar du bort den från servern.

 

 

Edit:

Är bilden du bifogade ett forskningsresultat :)

Liknar letterman

 

 

[inlägget ändrat 2005-06-28 13:34:57 av Cechise]

Länk till kommentar
Dela på andra webbplatser

Tacksam för ev. förslag.
På vadå? Hur du löser det (konceptuellt) har du fått förslag på. För att komma med förslag på hur du praktiskt löser det (kodning) måste vi få veta mer om miljön. Språk (asp/php), webbserver och installerade upload- och mailkomponenter tex.

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

Det är Letterman... Jag är, inbillar jag mig, lite snyggare....

 

Jag är tacksam för förslag på allt som gör att det funkar, oavsett om det rör sig om design/funktion/kodning eller vad som helst.

 

OK, Hittills har jag gjort en enkel formulärsida i html/js. Det kan jag lite om. Hur jag ska få en bild att infogas bredvid formuläret har jag ganska dåliga eller inga kunskaper om. Jag vet vad jag vill ha men inte hur jag ska göra för att få det att funka. Därför är jag tacksam för alla förslag som gör att det fungerar.

 

Hur skulle du lösa det?

 

MVH

 

Länk till kommentar
Dela på andra webbplatser

Jag vet vad jag vill ha men inte hur jag ska göra för att få det att funka. Därför är jag tacksam för alla förslag som gör att det fungerar.

 

Hur skulle du lösa det?

Ok, men som sagt krävs då lite mer info om dina förutsättningar. Vilken webserver körs? Vilka komponenter finns installerade (om några)?

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

Jag vet inte vilken webserver som körs. Hur tar jag reda på det? Semester på dataavdelningen.... Komponenter...? Tja....

 

 

 

Länk till kommentar
Dela på andra webbplatser

Isf är det Server software:

Microsoft-IIS/5.0

HTTP Version of Server: HTTP/1.1

 

ASP är det nog som gäller isf, har lite erfarenhet av det.

Nu då: förslag?

 

Mvh

 

 

Länk till kommentar
Dela på andra webbplatser

Då tackar jag för mig

Cluster has the floor :):thumbsup:

 

 

[inlägget ändrat 2005-06-28 15:40:02 av Cechise]

Länk till kommentar
Dela på andra webbplatser

Cluster has the floor
He he..

Börjar då med ett exempel på hur själva mailfunktionen kan lösas:[log]

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% IF Request("action")<>"sendMail" THEN %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>FormMailer</title>
</head>
<body>
<form action="?action=sendMail" method="post">
  FRÅN: <input type="text" name="mailSender"><br>
  TILL: <input type="text" name="mailRecipient"><br>
  ÄRENDE: <input type="text" name="mailSubject"><br><br>
  MEDDELANDE:<br>
  <textarea name="mailBody"></textarea><br><br>
  <input type="submit" value="SKICKA">
</form>
<%
IF Request("mail")="sent" THEN
  Response.Write("<strong>Meddelandet har skickats!</strong>")
END IF
%>
</body>
</html>
<%
ELSE
  ' TA EMOT VÄRDEN FRÅN FORMULÄRET
  mailSender=Request("mailSender")
  mailRecipient=Request("mailRecipient")
  mailSubject=Request("mailSubject")
  mailBody=Request("mailBody")

  ' SKAPA HTML-INNEHÅLLET I MAILET
  tmpHTML=Replace(mailBody, vbCrLf, "<br>")
  tmpHTML=Replace(tmpHTML, " ", "&nbsp;")   
  myHTMLbody="<html><head><meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1"">"
  myHTMLbody=myHTMLbody&"<title>"&mailSubject&"</title></head><body>"
  myHTMLbody=myHTMLbody&tmpHTML
  myHTMLbody=myHTMLbody&"</body></html>"   

  ' SÄTT INSTÄLLNINGAR FÖR MAILET OCH SKICKA DET
  ' Anpassa dessa att motsvara din mailleverantör
  myMailserver="mail.mindoman.nu"
  myUsername="anvandarnamn"
  myPassword="losenord"
  ' Nedan kan du låta vara som det är
  cdoAnonymous = 0
  cdoBasic = 1
  cdoSendUsingPickup = 1
  cdoSendUsingPort = 2
  SET mailer = server.CreateObject("CDO.message")
  SET conf = server.CreateObject("CDO.configuration")
  mailer.TextBody = mailBody
  mailer.HTMLBody = myHTMLbody
  mailer.From = mailSender
  mailer.Sender = mailSender
  mailer.Subject = mailSubject
  mailer.To = mailRecipient
  conf.Fields.item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = myMailserver
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = myUsername
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = myPassword
  mailer.Configuration = conf
  mailer.Configuration.fields.update
  mailer.Send   
  SET mailer=nothing
  SET conf=nothing

  Response.Redirect("?mail=sent")
END IF
%>

[/log]

 

Denna måste byggas ut med en upload-funktion för att kunna få med bilden. Därefter måste man se till att få in bilden i HTML-mailet. Återkommer med detta (om jag hinner) senare idag.

 

Obs! om/när moderatorn flyttar denna tråd till asp/vbskript-forumet blir koden mer lättläst.

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

Själva mailfunktionen har jag redan fixat. Det var med nån standardskit i FrontPage. Det enda som inte funkar är bild-funktionen.

 

Tack för det du gjort hittills.

 

Mvh

 

Länk till kommentar
Dela på andra webbplatser

Jag måste börja med att erkänna att mina kunskaper inte räckte ända fram i detta fall. Har inte hittat något bra sätt att få bilden inbäddad.:thumbsdown:

 

Har dock gjort en lösning som fungerar så att du först laddar upp en bild, sedan skapar och skickar ditt mail. Det som görs är att bilden sparas på webbservern och när mottagaren av mailet öppnar det så läses bilden in (i mailet altså, inte som bifogad fil) därifrån.

 

formMailer.aspFormulär för att välja fil samt skapa och skicka mailet. I denna måste du göra vissa anpassningar (framgår av kommentarerna)[log]

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% IF Request("action")<>"sendMail" THEN %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>FormMailer</title>
</head>
<body>
<% IF Request("imgSrc")="" AND Request("mail")<>"sent" THEN %>
  <form action="formMailerUpload.asp" enctype="multipart/form-data" method="post" name="f" id="f">
     VÄLJ BILD: <input type="file" name="test" size="50" /><br><br>
     <input type="radio" name="filename" value="original" checked /> Använd orginalnamn<br>
     <input type="radio" name="filename" value="userSpecified" />Ange ett nytt namn:
     <input type="text" name="userSpecifiedName" value="" /><br><br>
     <!-- OM DU VILL ANGE EN SPECIFIK (UNDER-)MAPP SOM BILDEN SKALL HAMNA I GÖR DU DET I VALUE NEDAN -->
     <input type="hidden" name="userSpecifiedFolder" value="">
     <input type="submit" value="Fortsätt &raquo;"/>      
  </form>
<% ELSE %>
  <form action="?action=sendMail" method="post">
     FRÅN: <input type="text" name="mailSender"><br>
     TILL: <input type="text" name="mailRecipient"><br>
     ÄRENDE: <input type="text" name="mailSubject"><br><br>
     MEDDELANDE:<br>
     <textarea name="mailBody"></textarea><br><br>
     <input type="hidden" name="imgSrc" value="<%=Request("imgSrc")%>">
     <input type="hidden" name="imgHeight" value="<%=Request("imgHeight")%>">
     <input type="hidden" name="imgWidth" value="<%=Request("imgWidth")%>">
     <input type="submit" value="SKICKA">
  </form>
<%
  IF Request("mail")="sent" THEN
     Response.Write("<strong>Meddelandet har skickats!</strong>")
  END IF
END IF
%>
</body>
</html>
<%
ELSE
  ' TA EMOT VÄRDEN FRÅN FORMULÄRET
  mailSender=Request("mailSender")
  mailRecipient=Request("mailRecipient")
  mailSubject=Request("mailSubject")
  mailBody=Request("mailBody")

  'OBS! Här måste du sätta in adressen till webbplatsen
  imgSrc="<img src=""http://www.mindoman.nu/intranet/"&Request("userSpecifiedFolder")&Request("imgSrc")&""" height="""&Request("imgHeight")&""" width="""&Request("imgWidth")&""">"


  ' SKAPA HTML-INNEHÅLLET I MAILET
  tmpHTML=Replace(mailBody, vbCrLf, "<br>")
  tmpHTML=Replace(tmpHTML, " ", "&nbsp;")   
  myHTMLbody="<html><head><meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1"">"
  myHTMLbody=myHTMLbody&"<title>"&mailSubject&"</title></head><body>"
  myHTMLbody=myHTMLbody&imgSrc&"<br>"&tmpHTML
  myHTMLbody=myHTMLbody&"</body></html>"   

  ' SÄTT INSTÄLLNINGAR FÖR MAILET OCH SKICKA DET
  ' Anpassa dessa att motsvara din mailleverantör
  myMailserver="mail.mindoman.nu"
  myUsername="anvandarnamn"
  myPassword="losenord"

  ' Nedan kan du låta vara som det är
  cdoAnonymous = 0
  cdoBasic = 1
  cdoSendUsingPickup = 1
  cdoSendUsingPort = 2
  SET mailer = server.CreateObject("CDO.message")
  SET conf = server.CreateObject("CDO.configuration")
  mailer.TextBody = mailBody
  mailer.HTMLBody = myHTMLbody
  mailer.From = mailSender
  mailer.Sender = mailSender
  mailer.Subject = mailSubject
  mailer.To = mailRecipient
  conf.Fields.item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = myMailserver
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = myUsername
  conf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = myPassword
  mailer.Configuration = conf
  mailer.Configuration.fields.update
  mailer.Send   
  SET mailer=nothing
  SET conf=nothing

  Response.Redirect("?mail=sent")
END IF
%>

[/log]

 

formMailerUpload.aspAnvänds för att ladda up vald fil.[log]

<%
Server.ScriptTimeout = 5400

Const ForWriting = 2
Const TristateTrue = -1
CrLf = Chr(13) & Chr(10)

Function GetFieldName(infoStr)
sPos = InStr(infoStr, "name=")
EndPos = InStr(sPos + 6, infoStr, Chr(34) & ";")
If EndPos = 0 Then
	EndPos = inStr(sPos + 6, infoStr, Chr(34))
End If
GetFieldName = Mid(infoStr, sPos + 6, endPos - _
	(sPos + 6))
End Function

Function GetFileName(infoStr)
sPos = InStr(infoStr, "filename=")
EndPos = InStr(infoStr, Chr(34) & CrLf)
GetFileName = Mid(infoStr, sPos + 10, EndPos - _
	(sPos + 10))
End Function

Function GetFileType(infoStr)
sPos = InStr(infoStr, "Content-Type: ")
GetFileType = Mid(infoStr, sPos + 14)
End Function

PostData = ""
Dim biData
biData = Request.BinaryRead(Request.TotalBytes)
For nIndex = 1 to LenB(biData)
PostData = PostData & Chr(AscB(MidB(biData,nIndex,1)))
Next

ContentType = Request.ServerVariables( _
"HTTP_CONTENT_TYPE")
ctArray = Split(ContentType, ";")

If Trim(ctArray(0)) = "multipart/form-data" Then
ErrMsg = ""
bArray = Split(Trim(ctArray(1)), "=")
Boundary = Trim(bArray(1))
FormData = Split(PostData, Boundary)
Dim myRequest, myRequestFiles(9, 3) 
Set myRequest = CreateObject("Scripting.Dictionary")
FileCount = 0
For x = 0 to UBound(FormData)
	InfoEnd = InStr(FormData(x), CrLf & CrLf)
	If InfoEnd > 0 Then
		varInfo = Mid(FormData(x), 3, InfoEnd - 3)
		varValue = Mid(FormData(x), InfoEnd + 4, _
			Len(FormData(x)) - InfoEnd - 7)
		If (InStr(varInfo, "filename=") > 0) Then
			myRequestFiles(FileCount, 0) = GetFieldName( _
				varInfo)
			myRequestFiles(FileCount, 1) = varValue
			myRequestFiles(FileCount, 2) = GetFileName( _
				varInfo)
			myRequestFiles(FileCount, 3) = GetFileType( _
				varInfo)
			FileCount = FileCount + 1
		Else
			myRequest.add GetFieldName(varInfo), varValue
		End If
	End If
Next
Else
ErrMsg = "Wrong encoding type!"
End If 

IF myRequest("userSpecifiedFolder")<>"" THEN
userSpecifiedFolder=myRequest("userSpecifiedFolder")&"/"
ELSE
userSpecifiedFolder=""
END IF

Set lf = server.createObject("Scripting.FileSystemObject")
If myRequest("filename") = "original" Then
BrowserType = UCase(Request.ServerVariables( _
	"HTTP_USER_AGENT"))
If (InStr(BrowserType, "WIN") > 0) Then
	sPos = InStrRev(myRequestFiles(0, 2), "\")
	fName = Mid(myRequestFiles(0, 2), sPos + 1)
End If
If (InStr(BrowserType, "MAC") > 0) Then
	fName = myRequestFiles(0, 2)
End If
FilePath = "./" &userSpecifiedFolder& fName
imgSrc=fName
Else
FilePath = "./" &userSpecifiedFolder& myRequest("userSpecifiedName")
imgSrc=myRequest("userSpecifiedName")
End If
SavePath = Server.MapPath(FilePath)
Set SaveFile = lf.CreateTextFile(SavePath, True)
SaveFile.Write(myRequestFiles(0, 1))
SaveFile.Close


Set myImg = LoadPicture(Server.MapPath(FilePath))
imgHeight = Round(myImg.height / 26.4583)
imgWidth = Round(myImg.width / 26.4583)
Set myImg = Nothing

Response.Redirect("formMailer.asp?imgSrc="&imgSrc&"&imgHeight="&imgHeight&"&imgWidth="&imgWidth&"&userSpecifiedFolder="&userSpecifiedFolder)
%>

[/log]I denna fil behöver du inte ändra något.

 

Det är möjligt att denna lösning inte passar/fungerar för dig. Men kanske någon annan kan ha hjälp av den. Eller så kanske någon kan anpassa den så att bilden blir infogad ordentligt (ska kolla efter en lösning själv men lovar inget).

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

Jag bugar allra ödmjukast och tackar jättemycket för hjälpen! Ska kika på det imorron, nu är jag för trött och sliten.

 

Stort tack!:thumbsup::thumbsup:

 

MVH

 

Länk till kommentar
Dela på andra webbplatser

(Det är möjligt att jag missförstår hela problemet, isf ber jag om ursäkt redan nu ;) Men, om jag förstår rätt vill du visa en bild som ligger lokalt hos användaren i en html-sida. Tyvärr tillåter inte åtminstone Firefox att man länkar till lokala filer från en sida på en annan server (av säkerhetsskäl: http://kb.mozillazine.org/Links_to_local_pages_don%27t_work ). Annars hade det varit praktiskt att kunna göra typ:

 

[log]<html>

<head>

<script type="text/javascript">

function update_preview(input)

{

preview = document.getElementById('preview');

previewlink = document.getElementById('previewlink');

previewlink.href = preview.src = 'file://' + input.value;

}

</script>

</head>

<body>

<form>

<input onchange="update_preview(this);" type="file" name="image" size="50" />

</form>

<a id="previewlink" href=""><img id="preview" width="100" height="100"

src="" /></a>

</form>

</body>

</html>

[/log]

 

Länk till kommentar
Dela på andra webbplatser

Det är möjligt att jag missförstår hela problemet, isf ber jag om ursäkt redan nu
Du är förlåten för om jag inte missförstår dig så har du faktiskt missförstått problemet. Har jag missförstått är det jag som får be om ursäkt.:)

 

NerdTompa vill ha ett formulär sör att skapa ett mail som skall innehålla en bild. Detta mail skall skapas med ett formulär.

 

Min lösning ovan fungerar finfint oavsett webbläsare eftersom det är en mailklient (alt. webmail) som skall läsa innehållet. Bildfilen ligger förvisso "lokalt" men då på en webbserver (och en http:// -adress) vilket är en helt annan sak.

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

Du har rätt, jag vill kunna hämta en bild lokalt och infoga den på en html-sida. Sidan råkar vara ett formulär, men hade lika gärna kunnat vara nån annan sida.

 

Testade din kod men fick ett felmeddelande:

"Ett fel har uppstått under körning.

Vill du göra en felsökning?

 

Rad: 6

Fel: Objektet stöder inte egenskapen eller metoden."

 

Det verkar iaf vara nära det jag är ute efter, så har du nån lösning eller nån annan idé är jag mycket tacksam. Tyvärr kan jag alldeles för lite för att fixa det själv, men som sagt du verkar vara på rätt väg.

 

MVH

 

[inlägget ändrat 2005-06-29 07:38:54 av NerdTompa]

Länk till kommentar
Dela på andra webbplatser

Jag testade det du gjort men det var inte riktigt vad jag var ute efter, zerblats låg närmare till hands. Ville bara tacka för att du lagt ner kraft och tid på det hela, jag kom ett par steg närmare lösningen.

 

Mvh

 

Länk till kommentar
Dela på andra webbplatser

Jag testade det du gjort men det var inte riktigt vad jag var ute efter, zerblats låg närmare till hands.
På vilket sätt passade inte min lösning? Du får nog förklara närmare i så fall.

 

Testade din kod men fick ett felmeddelande:
Jag antar att det är zerblats "lösning" du testat. Problemet är ju att det som han påpekar är omöjligt... Det är inte en lösning utan hans sätt att visa varför det inte går att göra så.

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

Om jag måste förklara mig närmare så är förklaringen att jag inte vill först ladda upp en bild, därefter skapa och skicka mitt mail. Jag vill infoga och se bilden direkt.

 

Jag är medveten om att zerblats "lösning" inte fungerar, men principen med Jscript i html passar mig bättre för det kan jag till skillnad från asp o liknande som jag knappt kan det mest basala i.

 

Du får nog förklara noggrannare hur du menar att jag göra...

 

MVH

 

Länk till kommentar
Dela på andra webbplatser

Problemet du har är ju att om du vill skicka ett mail från servern med en bild måste ju bilden iväg via servern och i något skede laddas upp.

 

Länk till kommentar
Dela på andra webbplatser

OK, som du märker kan jag för lite om hur det fungerar. Jag vet hur jag vill ha det men har ingen aning om hur jag gör. Eftersom jag kan html o js men inte asp el liknande, så vore det enklast om det gick att göra med det.

 

Det verkar som om jag får ta in en konsult för att lösa det åt mig.

 

Mvh

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...