Jel zna neko kako da iz c# aplikacije posaljem mail preko smtp protokola?
smtp iz c#
Zaključano
Zakačeno
Hvala a kako da mi aplikacija ne bude zamrznuta dok on pokusava da se poveze na server?
Mislim da je dobro rešenje da se taj kod za povezivanje i slanje mail-a smesti u posebnu nit (thread), pa da se pritiskom na komandu samo aktivira nova nit koja će da vrši posao u pozadini.
A možda je moguće koristiti i asinhroni poziv, bez kreiranja novih niti. Pogledaću, pa ću da javim.
A možda je moguće koristiti i asinhroni poziv, bez kreiranja novih niti. Pogledaću, pa ću da javim.
Potpis
Evo ga još bolje rešenje.
http://www.codeproject.com/csharp/smtpemailer.asp
Zašto je bolje? Najpre, program je mnogo bolje isprojektovan. Klase koje obavljaju posao su odvojene od UI-ja, tako da mogu lako biti iskorišćene i u drugim tipovima aplikacija, kao što je ASP.NET ili Web servisi. Takođe, iskorišćena je jedna lepa osobina C#-a, a to je XML komentari. Najzad, postoji i metod koji šalje mail asinhrono - bez blokiranja.
U svakom slučaju fin primer, i savetujem svima da ga malo razgledaju.
[Ovu poruku je menjao Dragi Tata dana 14.06.2002 u 10:39 AM GMT]
http://www.codeproject.com/csharp/smtpemailer.asp
Zašto je bolje? Najpre, program je mnogo bolje isprojektovan. Klase koje obavljaju posao su odvojene od UI-ja, tako da mogu lako biti iskorišćene i u drugim tipovima aplikacija, kao što je ASP.NET ili Web servisi. Takođe, iskorišćena je jedna lepa osobina C#-a, a to je XML komentari. Najzad, postoji i metod koji šalje mail asinhrono - bez blokiranja.
U svakom slučaju fin primer, i savetujem svima da ga malo razgledaju.
[Ovu poruku je menjao Dragi Tata dana 14.06.2002 u 10:39 AM GMT]
Potpis
Hvala puno za onaj primer ali opet mi nesto nije jasno. Ne mogu da ukapiram iz onog primera kako je on uspeo da se poveze i da odradi slanje bez da zaglavi aplikacija? Da li bi to, molim te, mogao da mi pojasnis?
Nisam startovao taj primer, ali koliko vidim, postoji opcija da se slanje mail-a obavi asinhrono, tj. startuje se nova nit (thread) koja to obavi, a glavna nit koja kontroliše UI ostaje slobodna i nema zamrzavanja.
Znaš li nešto o višenitnom programiranju ili da ti napišem koju reč i o tome?
Pozdrav.
Znaš li nešto o višenitnom programiranju ili da ti napišem koju reč i o tome?
Pozdrav.
Potpis
Znam samo izgleda nisam bio dobro ukapirao kako to radi iz c#-a :)
OK. Ako pogledaš fajl TestForm.cs, videćeš da se u funkciji button2_Click (grozno ime za kontrolu - button2) poziva metod SendMessageAsync klase SmtpEmailer. E sad, kad pogledaš definiciju te klase u fajlu SmtpEmailer.cs videćeš da pomenuti metod izgleda ovako:
Ovaj metod će da pozove SendMessage (koji u stvari vrši sav posao) u posebnoj niti i odmah će da se vrati, bez blokiranja aplikacije. Tako ti možeš da radiš sa UI-jem dok se mailovi šalju u odvojenoj niti. Kad je mail poslat (tj kad se završi funkcija SendMessage) ta "pozadinska nit" se završava i biva počišćena.
Code:
public void SendMessageAsync()
{
new Thread(new ThreadStart(SendMessage)).Start();
}
public void SendMessageAsync()
{
new Thread(new ThreadStart(SendMessage)).Start();
}
Ovaj metod će da pozove SendMessage (koji u stvari vrši sav posao) u posebnoj niti i odmah će da se vrati, bez blokiranja aplikacije. Tako ti možeš da radiš sa UI-jem dok se mailovi šalju u odvojenoj niti. Kad je mail poslat (tj kad se završi funkcija SendMessage) ta "pozadinska nit" se završava i biva počišćena.
Potpis
Evo jedan vrlo lak nacin za slanje maila.
Ovaj primer sam nasao na C# corner-u a ima jos mnogo drugih cool stvari. Kako u C#-u nikad nisam pisao mail program ovo mi bas izgleda lako (sve mi se vise i vise svidja ovaj VS.NET:)). Iznenadila me je velicina koda koji u stvari vrsi poso (znaci bez onog standardnog oko kreiranja kontrola...)
Evo vam i ceo projekat!
Imam jos nekoliko clanaka oko mailinga u C#-u pa mogu da postujem ako hocete mada je Dragi sve lepo objasnio :)
Ovaj primer sam nasao na C# corner-u a ima jos mnogo drugih cool stvari. Kako u C#-u nikad nisam pisao mail program ovo mi bas izgleda lako (sve mi se vise i vise svidja ovaj VS.NET:)). Iznenadila me je velicina koda koji u stvari vrsi poso (znaci bez onog standardnog oko kreiranja kontrola...)
Evo vam i ceo projekat!
Imam jos nekoliko clanaka oko mailinga u C#-u pa mogu da postujem ako hocete mada je Dragi sve lepo objasnio :)
Potpis
"If you do what you always did! - You will get what you always got!"
www.deki.co.yu/dev
Programce za slanje poruka na mobilne telefone napravljen na osnovu onog sto sam naucio iz ove teme :)
[Ovu poruku je menjao Dejan Krstic dana 29.07.2002 u 04:07 PM GMT]
Programce za slanje poruka na mobilne telefone napravljen na osnovu onog sto sam naucio iz ove teme :)
[Ovu poruku je menjao Dejan Krstic dana 29.07.2002 u 04:07 PM GMT]
Pa postuj i source pa da i mi naucimo :)
Izgleda da si dovoljno naucio ali evo da postujem i ovaj source kojeg sam nasao u mojoj "staroj" arhivi ali nisam imao vremena da ga postujem (nadam se da ne smeta :)).
simpleSMTPMailer:
Izgleda da si dovoljno naucio ali evo da postujem i ovaj source kojeg sam nasao u mojoj "staroj" arhivi ali nisam imao vremena da ga postujem (nadam se da ne smeta :)).
simpleSMTPMailer:
Code:
using System.Net.Sockets;
using System.Collections;
using System.IO;
using System.Net;
using System;
class SMTPMailer
{
string SMTPServer;
string host;
public SMTPMailer(string server, string _host){
SMTPServer = server;
host = _host;
}
public void Send(Message msg)
{
TCPClient sender = new TCPClient(SMTPServer,25);
Byte[] outbytes;
string input;
try{
NetworkStream ns = sender.GetStream();
StreamReader sr = new StreamReader(sender.GetStream() );
Console.WriteLine(sr.ReadLine() );
input = "HELO " + host + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input = "MAIL FROM: " +"<" + msg.From + ">" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input = "RCPT TO: " + "<" + msg.To + ">" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input = "DATA" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input ="Subject: " + msg.Subject + "\r\n" + msg.Body + "\r\n" + "." + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input ="QUIT" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
sr.Close();
ns.Close();
}
catch(InvalidOperationException ioe){
Console.WriteLine("Could not connect to mail server");
}
}
public static void Main()
{
SMTPMailer mlr = new SMTPMailer("smtp-server", "main");
Message msg = new Message("[email protected]","[email protected]",
"Hello!", "This is a test...");
mlr.Send(msg);
Console.ReadLine();
}
}
class Message
{
string to;
string from;
string subject;
string body;
public Message(){
}
public Message(string _to, string _from, string _subject, string _body){
to = _to;
from = _from;
body = _body;
subject = _subject;
}
public string To {
get {return to;}
set {to = value;}
}
public string From {
get {return from;}
set {from = value;}
}
public string Body {
get {return body;}
set {body = value;}
}
public string Subject {
get {return subject;}
set {subject = value;}
}
}
using System.Net.Sockets;
using System.Collections;
using System.IO;
using System.Net;
using System;
class SMTPMailer
{
string SMTPServer;
string host;
public SMTPMailer(string server, string _host){
SMTPServer = server;
host = _host;
}
public void Send(Message msg)
{
TCPClient sender = new TCPClient(SMTPServer,25);
Byte[] outbytes;
string input;
try{
NetworkStream ns = sender.GetStream();
StreamReader sr = new StreamReader(sender.GetStream() );
Console.WriteLine(sr.ReadLine() );
input = "HELO " + host + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input = "MAIL FROM: " +"<" + msg.From + ">" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input = "RCPT TO: " + "<" + msg.To + ">" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input = "DATA" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input ="Subject: " + msg.Subject + "\r\n" + msg.Body + "\r\n" + "." + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
input ="QUIT" + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
Console.WriteLine(sr.ReadLine() );
sr.Close();
ns.Close();
}
catch(InvalidOperationException ioe){
Console.WriteLine("Could not connect to mail server");
}
}
public static void Main()
{
SMTPMailer mlr = new SMTPMailer("smtp-server", "main");
Message msg = new Message("[email protected]","[email protected]",
"Hello!", "This is a test...");
mlr.Send(msg);
Console.ReadLine();
}
}
class Message
{
string to;
string from;
string subject;
string body;
public Message(){
}
public Message(string _to, string _from, string _subject, string _body){
to = _to;
from = _from;
body = _body;
subject = _subject;
}
public string To {
get {return to;}
set {to = value;}
}
public string From {
get {return from;}
set {from = value;}
}
public string Body {
get {return body;}
set {body = value;}
}
public string Subject {
get {return subject;}
set {subject = value;}
}
}
Potpis
"If you do what you always did! - You will get what you always got!"
Inace program verovatno vraca gresku 550 i ne salje poruke a to je zbog mobtelovog servera koji od juce popodne odbija da prosledjuje poruke na mobilne telefone iz ko zna kog razloga. Ako nesto budem saznao javicu.
Ponovo radi slanje bez problema.