webForumDet fria alternativet

Skicka e-mail m h a VB

.NET

31 svar · 713 visningar · startad av ampy · sida 2 av 2

Frågan, av ampy

Kan man skicka e-mail med hjälp av Visual Basic? Jag vill alltså skapa ett program där man ska kunna skicka e-mail till valfri e-mailadress. Om det går, hur gör man detta? I ASP vet jag att man gör det med hjälp av komponenter, t ex CDONTS eller Jmail. Är det samma sak i VB?

Läs frågan i sin helhet →
Medlem sedan juni 20022 599 inlägg
#21

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.

Medlem sedan feb. 20011 498 inlägg
#22

Mailen ligger i kvar i mappen:
C:\Inetpub\mailroot\Queue\

Felmeddelande jag hittar i event-loggen är:
Se bifogad bild.

smtp.gif
Medlem sedan juni 20022 599 inlägg
#23

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"
Medlem sedan feb. 20011 498 inlägg
#24

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

Medlem sedan juni 20022 599 inlägg
#25

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.

Medlem sedan feb. 20011 498 inlägg
#26

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?

Medlem sedan juni 20022 599 inlägg
#27

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.

Medlem sedan feb. 20011 498 inlägg
#28

Ok. Då går jag nog på tvåan. :)

Medlem sedan maj 2003924 inlägg
#29

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.....

Medlem sedan maj 2003924 inlägg
#30

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

Medlem sedan okt. 20023 030 inlägg
#31
Do 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
Medlem sedan maj 2003924 inlägg
#32

jo skrev vist fel i i Winsock1_DataArrival sorry

266 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)