04. juli 2003 - 09:40Der er
10 kommentarer og 1 løsning
Problem med SMTP via socket
Hej!
Jeg sidder og roder lidt med at sende e-mail via en socket forbindelse til SMTP serveren. Det går også fint med de første par kommandoer, men når jeg sender DATA kommandoeen, får jeg tilbage som svar, at jeg skal sende indholdet og afslutte med "." på en linje for sig... Men jeg kan ikke få det til at fungere!
Jeg har prøvet næsten alt, synes jeg, med forskelligt indhold i følgende kode:
[snakker lidt med server...]
writer.println("DATA"); line = reader.readLine(); System.out.println("Server Response : " + line);
writer.println("Subject: Test");
writer.println("test"); writer.println();
writer.println("."); //dette punktum bliver vist ikke accepteret!?
line = reader.readLine(); System.out.println("Server Response : " + line);
writer.println("QUIT"); line = reader.readLine(); System.out.println("Server Response : " + line);
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
De content headere er på RFC 822 niveau ting og dit problem med DATA og . er på RFC 821 niveau og derfor er det ikke overraskende at det ikke gør en forskel.
Det med headerne kunne jeg godt forestille mig... Jeg har skimmet RFC 821 for at finde noget, men der var ikke rigtig noget, jeg kunne bruge til noget.
Jeg arbejder med en e-mail applikation til en set top box og har derfor kun en begrænset del af API'et til rådighed...
// set SMTP server public static void setMailHost(String server) { mailHost = server; }
// open email public void open(String from, String to, String subject) throws Exception { if (mailHost == null) { throw new Exception("Mailhost not set"); } SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzzz", Locale.US); mailSocket = new Socket(InetAddress.getByName(mailHost), SMTP_PORT); outStream = new PrintWriter(mailSocket.getOutputStream()); inStream = new BufferedReader(new InputStreamReader(mailSocket.getInputStream())); receive(); send("HELO " + InetAddress.getLocalHost().getHostAddress()); receive(); send("MAIL FROM: <" + from + ">"); receive(); send("RCPT TO: <" + to + ">"); receive(); send("DATA"); receive(); send("Return-Path: <" + from + ">"); send("From: " + from); send("To: " + to); send("Subject: " + subject); send("Date: " + format.format(new Date())); send("MIME-version: 1.0"); send("Content-type: text/plain; Charset=iso-8859-1"); send("Content-transfer-encoding: 8bit"); send(""); return; }
// send line public void addLine(String line) { send(line); return; }
// close email public void close() throws Exception{ send("."); receive(); send("QUIT"); receive(); }
// send simple email public static void sendSimple(String from, String to, String subject, String body) throws Exception { Email temp = new Email(); temp.open(from,to,subject); temp.addLine(body); temp.close(); return; }
// send simple email with no body public static void sendSimpleNoBody(String from, String to, String subject) throws Exception { Email temp = new Email(); temp.open(from,to,subject); temp.close(); return; }
Det fungerer sgu... Så skal jeg bare ha' fundet ud af, hvorfor min oprindelige kode ikke gør. Men det har nok noget at gøre med de ting, du nævner.
Tak for hjælpen i hvert fald. Lækkert at kode lige så'n en lørdag aften :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.