NnikoMedlem sedan juni 20022 599 inlägg Om du inte får nåt felmeddelande så innebär det att SMTP:en har accepterat att skicka mailet vidare. Om den sen lyckas är en annan sak. Det mest troliga felkällan jag kan komma på är att du har en brandvägg som hindrar SMTP:en att komma ut över port 25.
Felsökningstips:
Kolla runt i undermapparna till C:\inetpub\mailroot och se om mailen ligger kvar där.
Kolla i event-loggen efter felmeddelanden som kommer från SMTP-tjänsten.
AampyMedlem sedan feb. 20011 498 inlägg Mailen ligger i kvar i mappen:
C:\Inetpub\mailroot\Queue\
Felmeddelande jag hittar i event-loggen är:
Se bifogad bild.
NnikoMedlem sedan juni 20022 599 inlägg
Mailen ligger i kvar i mappen:
C:\Inetpub\mailroot\Queue\
Skumt. Du har en fast uppkoppling? Och inga brandväggsrestriktioner ut över port 25? Har du provat att skicka till andra adresser?
Vad du kan göra är att slå på loggningen i SMTP för att se vad som händer:
Högerklicka SMTP i IIS Managern->Properties->Enable logging. En annan möjlighet är att du använder en extern SMTP på ditt webhotel tex. Isåf måste du normalt skicka med användarnamn/lösenord.
objMail.MailServerUserName = "xxxxxx"
objMail.MailServerPassWord = "yyyyyy"
AampyMedlem sedan feb. 20011 498 inlägg När jag aktiverade logging så kom mailen fram. :)
Men om jag nu kör mitt program på en annan dator som inte har IIS så går det ju inte att skicka mail. Kan man lösa det på ett annat sätt? :q
NnikoMedlem sedan juni 20022 599 inlägg
När jag aktiverade logging så kom mailen fram.
Skumt.
Men om jag nu kör mitt program på en annan dator som inte har IIS så går det ju inte att skicka mail. Kan man lösa det på ett annat sätt?
Ja. Lite olika förslag:
1. Hårdkoda in namnet på en extern SMTP (+användarnamn/lösenord) som du har tillgång till.
Fördelar: Snabbt och enkelt om det är ett program som bara ska spridas i en mindre krets.
Nackdelar: Oflexibelt och osäkert eftersom du ger andra access till ditt konto. Du får också eventuella brandväggsproblem.
2. Låt dom som använder programmet själv ange uppgifter för vilken SMTP de vill använda.
Fördelar: Flexibelt och inga brandväggsproblem.
Nackdelar: Kräver lite mer av användaren.
3. Koda en egen (minimal) SMTP-server inne i programmet (vissa virus gör så).
Fördelar: Slipper använda nån komponent typ JMail. Slipper använda en extern SMTP.
Nackdelar: Bökigt, krångligt och samma brandväggsproblem som i 1:an.
4. Lägg upp en publik ASP- eller PHP-sida som skickar mailet och låt ditt program enbart anropa sidan internt via en URL. (Alltså i princip en webservice).
Fördelar: Flexibelt. Slipper använda JMail. Inga brandväggsproblem
Nackdelar: Inga direkta. Kräver att du har nån plats på ett webbhotel.
2:an eller 4:an är nog bäst, men det beror helt på vad du har för syfte med ditt program. En ännu enklare variant är ju att du smäller upp användarens eget Outlook och låter honom/henne skicka mailet manuellt.
AampyMedlem sedan feb. 20011 498 inlägg Tack för ett lysande inlägg!
Jag läste en tråd på ett annat forum där han skrev detta:
leta reda på hur du använder winsock på ett vettigt sätt med api, kör sedan ethereal när du skickar ett mail. Det som skickas skall du skicka, fast med delvis annat innehåll (du märker vad som skall ändras). Sedan använder du winsock för att skicka det.
Man jag har ingen aning hur man gör detta. :l
Är det ett bra sätt?
NnikoMedlem sedan juni 20022 599 inlägg Visst kan du koda allt på winsocknivå vilken metod du än använder. Skillnaden är bara att det blir mycket krångligare (det är därför komponenter som JMail finns). Det förändrar heller inget i princip. Du behöver fortfarande tillgång till en SMTP i metod 1 o 2.
De som skrev det du citerar syftar nog på metod 3, men jag tycker inte du ska ge dig in på den.
AampyMedlem sedan feb. 20011 498 inlägg Ok. Då går jag nog på tvåan. :)
PPsyDoniaMedlem sedan maj 2003924 inlägg det är bättre att använda sig utav winsock tycker jag för om du skickar via jmail eller cdonts så måste den so manvänder ditt program ha dom installerade oxå och det är ju inte alltid man har.....
PPsyDoniaMedlem sedan maj 2003924 inlägg Om du skulle vilja använda Winsock kan du typ göra så här..
Dim Res As String
Private Sub Skicka()
Winsock1.RemotePort = 25
Winsock1.RemoteHost = Din_SMTP_Server
Winsock1.Connect
Do Until Winsock1.State = 7
DoEvents
Loop
Res = "0"
Winsock1.SendData "MAIL FROM: " & Din_Email & vbCrLf
Do Until Res = "250"
DoEvents
Loop
Res = "0"
Winsock1.SendData "RCPT TO: " & Motagarens_Email & vbCrLf
Do Until Res = "250"
DoEvents
Loop
Res = "0"
Winsock1.SendData "DATA" & vbCrLf
Do Until Res = "350"
DoEvents
Loop
Winsock1.SendData "FROM: " & Ditt_Namn & vbCrLf
Winsock1.SendData "SUBJECT: " & Title & vbCrLf
Winsock1.SendData Text1.Text & vbCrLf & "." & vbCrLf
Do Until Res = "250"
DoEvents
Loop
Winsock1.Close
MsgBox "Mail sent!"
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
Dim Length As Long
Winsock1.GetData Data
Length = Len(Data)
sRes = Left$(Data, 3)
End Sub
Nexus86Medlem sedan okt. 20023 030 inläggDo Until Res = "250"
DoEvents
Loop
Är det bara jag som verkar tycka att denna loop aldrig kommer gå klart? Möjligtvis om du ändrar i Winsock1_DataArrival till:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
Dim Length As Long
Winsock1.GetData Data, , bytesTotal
Length = Len(Data)
Res = Left$(Data, 3)
End Sub
PPsyDoniaMedlem sedan maj 2003924 inlägg jo skrev vist fel i i Winsock1_DataArrival sorry