Levélkezelés C, vagy C++ -ból

 ( stage81 | 2005. március 11., péntek - 15:28 )

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Sziasztok!

Ismét a segítségeteket szeretném kérni! Főnököm meggyöző erejét kihasználva rávett, hogy C-ből írjak neki egy egyszerű levelezőprogramot. (Csak annyi lenne a feladata, hogy elküldjön egy levelet). Ez idáig szép és jó a történet, de felmerült bennem egy kérdés...
Minden esetben fel kell jelentkezni valamilyen levélszerverre, vagy közvetlenül, publikus ip-címmel is el tudom küldeni a levelet. (Megnéztem pár include állományt, és ott kivétel nélkül log in-olni kellett valahova... )
Szóval ha lehet levelet küldeni mailserver nélkül, akkor légyszi szóljatok! Előre is köszike!

S81

mail parancs miért nem jó? Az is c-ben van írva.
Ha mégsem, nézd meg az smtp protocol rfc-jét, bár kétlem, hogy van értelme egy smtp-klienst lekódolni.

[quote:8133a23ceb="stage81"]Sziasztok!

Ismét a segítségeteket szeretném kérni! Főnököm meggyöző erejét kihasználva rávett, hogy C-ből írjak neki egy egyszerű levelezőprogramot. (Csak annyi lenne a feladata, hogy elküldjön egy levelet). Ez idáig szép és jó a történet, de felmerült bennem egy kérdés...
Minden esetben fel kell jelentkezni valamilyen levélszerverre, vagy közvetlenül, publikus ip-címmel is el tudom küldeni a levelet. (Megnéztem pár include állományt, és ott kivétel nélkül log in-olni kellett valahova... )
Szóval ha lehet levelet küldeni mailserver nélkül, akkor légyszi szóljatok! Előre is köszike!

S81[/quote:8133a23ceb]

Mondd meg a főnöködnek, hogy értelmesebb feladatokra
költse a pénzét. Ő is jobban járna, meg Te is.

Mailserver nélkül hova szeretnél levelet küldeni? :) Nincs ami fogadja...

Amire te gondolsz, az az, hogy vajon lehet-e közvetlenül a címzett domainjének smtp szerveréhez beszélni. Természetesen lehet, csak megeshet, hogy úgy rúg ki, mint macskát dolgát végezni, tekintve hogy nem az ő domainjéből jössz. A legbiztosabb megoldás az, ha a mindenkori szolgáltatód (szerver esetén a hosting cég) smtp szerverét használod, oda nem kell "bejelentkezni" általában (bár pl. az enternet újabban authossá tette az smtp szerverét, nagyon helyesen).

Ha ez így nem jó (nincs kedved config file-t írni/kezelni a progihoz, amiben letárolod a szervert), akkor szólj a sendmailnek progiból, az majd tudja mit tegyen, ha be van lőve a rendszer.

Hát, erre C-t használni kicsit olyan, mint sarokcsiszolóval szeget beverni :).
Ha csak átmeneti célra kell, shellben is meg lehet csinálni, bár ezt az igénytelenségi versenyre is lehetne nevezni:
[code:1:ad05e1f2de]
#!/bin/bash

# args: $1=file to send
HOST=127.0.0.1
PORT=25025
FROM="<bela@sehol.se>"
TO="<helen@sehol.se>"

socket -qp "
function send() { echo \$1 >&1001; echo -en \$1; };
function recv() { read; echo \$REPLY >&1001; };
function sendfile() { cat \$1; echo -n \"(file \$1)\" >&1001; send \"\r\n.\r\n\"; };
recv;
send \"EHLO client.sehol.se\r\n\"; recv;
send \"MAIL FROM: $FROM\r\n\"; recv;
send \"RCPT TO: $TO\r\n\"; recv;
send \"DATA\r\n\"; recv;
sendfile $1; recv;
send \"QUIT\r\n\"; recv;
" $HOST $PORT 1001>&1
sleep 1
[/code:1:ad05e1f2de]

egyébként meg pl. perlben egész épeszű megoldások vannak ('libnet-perl' csomag):
[code:1:ad05e1f2de]
#!/usr/bin/perl
use strict;
use Net::SMTP;

$smtp = Net::SMTP->new('mailtest');
print "Banner was: $smtp->banner()\n";
$smtp->mail('senki2@sehol.se');
$smtp->to('test@sehol.se');
$smtp->data();
$smtp->datasend($msg);
$smtp->dataend();
$smtp->quit;
[/code:1:ad05e1f2de]

bár ha nem feltétlen muszáj direktben TCP-n beszélni, akkor persze :)
[code:1:ad05e1f2de]
cat level | mail -s 'Szia Bela' bela@sehol.se
[/code:1:ad05e1f2de]

[quote:ac219507bd="Ochronus"]Mailserver nélkül hova szeretnél levelet küldeni? :) Nincs ami fogadja...

Amire te gondolsz, az az, hogy vajon lehet-e közvetlenül a [b:ac219507bd][u:ac219507bd]címzett domainjének[/u:ac219507bd][/b:ac219507bd] smtp szerveréhez beszélni. Természetesen lehet, csak megeshet, hogy úgy rúg ki, mint macskát dolgát végezni, tekintve hogy nem az ő domainjéből jössz.[/quote:ac219507bd]

Bar tobbnyire megse dob ki, mivel a [b:ac219507bd]cimzett domain[/b:ac219507bd] leveleit o kezeli. ;)
Altalaban egy domainbe kivulrol is johet level.

[quote:c136a3b28f="rka"][quote:c136a3b28f="Ochronus"]Mailserver nélkül hova szeretnél levelet küldeni? :) Nincs ami fogadja...

Amire te gondolsz, az az, hogy vajon lehet-e közvetlenül a [b:c136a3b28f][u:c136a3b28f]címzett domainjének[/u:c136a3b28f][/b:c136a3b28f] smtp szerveréhez beszélni. Természetesen lehet, csak megeshet, hogy úgy rúg ki, mint macskát dolgát végezni, tekintve hogy nem az ő domainjéből jössz.[/quote:c136a3b28f]

Bar tobbnyire megse dob ki, mivel a [b:c136a3b28f]cimzett domain[/b:c136a3b28f] leveleit o kezeli. ;)
Altalaban egy domainbe kivulrol is johet level.[/quote:c136a3b28f]

Jogos, ezt csúnyán félrefogalmaztam :) A relaying járt közben a fejemben.

Köszike mindenkinek, de találtam egy sokkal egyszerűbb megoldást... Van egy smtp nevű header állomány, melyben van egy Smtp nevű osztály.
A konstruktorában meg lehet adni : from, to, subject, body
példányosításkor ha tud, kapcsolódik a from levelezőszerveréhez, és az itt megadott e-mail cím "nevében" elküldi a címzethez a body-ban leírtakat.
Köszi mindenkinek, aki segíteni próbált!
S81