189 messaggi dal 03 ottobre 2006
Ciao a tutti
ho fatto una pagina web in cui scrivo un messaggio che vorrei inviare per posta ma vorrei che il destinatario riceva la email con un mittente preso dal mio DB a seconda dei casi, invece l'invio della posta funziona solo se impongo che il mittente sia l'indirizzo di posta che ho creato nel server che ho in hosting. Mi sembra una situazione risolvibile, anche in base a ciò che leggo in giro su Internet ma non so come... Riporto qui sotto le poche righe di interesse dove faccio notare che solo se sul textboxfrom.text scrivo appunto l'indirizzo di posta che ho registrato nel server in hosting tutto funziona. Eppure il secondo parametro del message.from dovrebbe essere l'indirizzo visualizzato dunque dovrei poter mettere ciò che voglio no?
Se metto un altro indirizzo appare un messaggio di errore che fa capire che le credenziali di accesso non sono corrette ma quelle io mica le cambio, uso sempre nell'oggetto smtpclient il nome utente e la password che mi ha fornito l'hosting per usare l'smtp.
avete un suggerimento per dirmi dove sto sbagliando?

Grazie
Ciao

MailMessage message = new MailMessage();
message.From = new MailAddress(TextBoxFrom.Text, TextBoxFrom.Text);
SmtpClient client = new SmtpClient(smtp_server_address, porta);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
NetworkCredential oCredential = new NetworkCredential(nome_utente, password);
client.Credentials = oCredential;
client.SendAsync(message, userState);
Ciao.

Beh mi pare ovvio che ti dia quell'errore, tu gli passi una mail che non ha quelle credenziali...

Secondo me, se non hai bisogno e non necessaria, togli l'autenticazione della mail, poi invece di usare una textbox per l'indirizzo del mittente, puoi usare una dropDownList popolata dal db contentente gli indirizzi presenti nella banca dati...

fammi sapere...

Marina di Camerota OnLine
VicenzaSoftware:Creazione siti web
Forum Tecnologie
189 messaggi dal 03 ottobre 2006
Grazie per la risposta ma mi sfugge qualcosa...
Probabilmente non so bene come funziona il sistema.
Le credenziali di accesso le specifico tramite le righe
SmtpClient client = new SmtpClient(smtp_server_address,26)
NetworkCredential oCredential = new NetworkCredential (utente, pwd)
dove smtp_server_address mi è imposto dal provider dell'hosting un po' come si configura un client di posta o mi sbaglio?

a questo punto gli passo una email da spedire specificando gli indirizzi:
message.From = new MailAddress(indirizzo_di_posta,Indirizzo_da_mostrare)

al posto di Indirizzo_di_posta sono costretto a mettere l'indirizzo della email che ho creato presso l'hosting mentre al posto di indirizzo_da_mostrare posso mettere ciò che voglio ma poi al destinatario arriva come mittente "indirizzo_di_posta"
come ti ho descritto fin qui, tutto funziona.

Ma non c'è un modo per fare arrivare la email al destinatario in modo che come mittente veda un indirizzo diverso da quello che ho creato presso l'hosting e quindi se lui fa "rispondi" risponda all'indirizzo che voglio io? altrimenti nel corpo della email sono costretto a scrivere "Non rispondere a questo indirizzo perchè è un server automatico... o qualcosa del genere" e vorrei evitarlo.

Per rispondere alle tue domande poi:
Non posso togliere l'accesso tramite credenziali perchè mi è imposto dal provider di hosting credo e poi sostituire la textbox con una lista prelevata dal DB non mi aiuta perchè quell'indirizzo non deve sceglierlo l'utente ma deve essere inserito da codice in automatico.
Grazie
5.610 messaggi dal 09 febbraio 2002
Contributi
wmartin ha scritto:
dove smtp_server_address mi è imposto dal provider dell'hosting un po' come si configura un client di posta o mi sbaglio?


no, non sbagli. Le credenziali sono necessarie per accedere al servizio di spedizione e-mail.
Forse un tempo le politiche dei provider erano più rilassate e ti consentivano di spedire dai loro spazi hosting anche senza credenziali. Oggi, tuttavia, con tutto lo spam che gira fanno bene a voler identificare i propri utenti. Questo gli da un controllo più granulare sulle e-mail che partono. Potrebbero, per esempio, imporre un limite di tot email all'ora per ogni utente.


al posto di Indirizzo_di_posta sono costretto a mettere l'indirizzo della email che ho creato presso l'hosting mentre al posto di indirizzo_da_mostrare posso mettere ciò che voglio ma poi al destinatario arriva come mittente "indirizzo_di_posta"


Queste tecniche sono simili a quelle che usa chi fa phishing :) Fingersi qualcun altro non è mai una buona cosa e i filtri antispam tendono a cestinare le email in cui il mittente è contraffatto. Esiste anche un protocollo, l'SPF, che ha il preciso scopo di impedire il forging dell'indirizzo mittente. Non tutti i server di posta lo impiegano (forse un 50%?) e quindi molte e-mail provenienti da server non esplicitamente autorizzati vengono lasciate passare.

Puoi procedere in due modi.
Il primo è solo un tentativo perché non ho idea di come sia stato configurato il server di posta del tuo provider, e quindi potrebbe non funzionare.

Hai notato che l'oggetto MailMessage ha 2 proprietà per indicare il mittente? Una è .Sender, l'altra è .From.
.Sender deve contenere l'indirizzo di colui che spedisce "fisicamente" il messaggio, cioè il tuo indirizzo, quello che hai creato con l'hosting.

.From è l'indirizzo che verrà mostrato nel client di posta. E' la persona per conto della quale il messaggio è stato spedito. E' l'indirizzo dell'utente, quello che leggi da una textbox.

Specificare un Sender diverso dal From ti fornisce un grado maggiore di trasparenza. Tu comunichi al server che sei tu che spedisci il messaggio per conto di un altro, e il filtro SPF *potrebbe* essere clemente con te. Dico potrebbe perché ognuno ha la facoltà di modificare il proprio server come gli pare, come questo tizio qui.

Differenziare il Sender è anche il sistema usato da Aspitalia per la messaggistica tra gli utenti. Se guardi il sorgente del messaggio che ti ho mandato noterai che il mio indirizzo risulta essere il From; mentre il Sender è un indirizzo di ASPItalia.com, cioè con lo stesso dominio delle pagine da cui il messaggio si è originato.

Se il tuo provider ti consente di fare questo, non puoi comunque lasciare che l'utente digiti quel che vuole nella textbox. Devi imporgli di usare l'indirizzo email con il quale si è registrato, altrimenti rischi che il tuo modulo venga bersagliato dagli spammer. Mettici anche un captcha, per giusta misura.

La seconda cosa che puoi fare è molto più semplice, ed è usare l'header Reply-To. E' fatta apposta per indicare un indirizzo di risposta che verrà usato come destinatario quando l'utente andrà a rispondere al messaggio. Questo è forse il metodo che ti consente di avere una deliverability maggiore. L'utente saprà che il messaggio proviene da te, perché lo vede dal mittente, ma quando andrà a rispondere, nel nuovo messaggio comparirà l'indirizzo del vero mittente.

MailMessage msg = new MailMessage();
msg.From = new MailAddress("tuoindirizzo@hosting.com");
msg.ReplyToList.Add(new MailAddress("mittente@hotmail.it"));
msg.To.Add(new MailAddress("destinatario@live.it"));


ciao,
Modificato da BrightSoul il 21 giugno 2011 19.42 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
189 messaggi dal 03 ottobre 2006
Grazie per la risposta veramente precisa esauriente e anche funzionante con il secondo metodo.
Vorrei però precisare alcuni dettagli che comportano una domanda finale.
Prima di tutto immagino che sotto tu intendessi che l'oggetto MailAddress ha due parametri e non MailMessage. In questo caso, come ti scrivevo, avevo già provato a mettere nel parametro "sender" l'email creata con l'hosting chiamiamola info@dominio.it e come "from" l'indirizzo mittente che avrei voluto comparisse al destinatario chiamiamolo wmartin@tiscali.it ma così facendo nella casella from del client di posta del destinatario mi viene una scritta del tipo: "wmartin@tiscali.it <info@dominio.it>" che non sarebbe male se non fosse che cliccando su "rispondi" risponderei a info@dominio.it e questo è proprio quello che voglio evitare.

Mi pare di capire che questo sia il metodo usato da te in aspitalia e a te funziona perchè nella email che mi hai mandato, se io provo a risponderti, rispondo all'indirizzo tuo personale di Tiscali e non a quello di AspItalia... se fin qui ho sbagliato qualcosa avvisami altrimenti deduco semplicemente che questo sistema dal mio provider non va.

Se oltre a quello che ti ho scritto sopra però aggiungo il parametro "reply to" mettendo l'indirizzo wmartin@tiscali.it tutto funziona come volevo nel senso che sul client del destinatario compare lo stesso una cosa de tipo: "wmartin@tiscali.it <info@dominio.it>" però stavolta se clicco su "rispondi" mi risponde a wmartin@tiscali.it.

Ecco allora l'ultima domanda:
la scritta che compare nel mittente <info@dominio.it> non posso proprio evitare di mostrarla? E'legato ai sistemi di sicurezza di cui mi parlavi per evitare il phishing? Vorrei evitare che l'utente che riceve la email fosse tentato comunque ad usare quell'indirizzo per rispondere...
grazie
Ciao
5.610 messaggi dal 09 febbraio 2002
Contributi

la scritta che compare nel mittente <info@dominio.it> non posso proprio evitare di mostrarla?


Sì, puoi evitare che venga mostrata.
La classe System.Net.Mail.MailAddress ha 3 overload, di cui 2 sono interessanti nel nostro caso:

public MailAddress(string address)
e
public MailAddress(string address, string displayName)


Puoi usare o l'uno o l'altro. Usi il primo se vuoi indicare solo l'indirizzo e-mail:

MailAddress address = new MailAddress("wmartin@tiscali.it");


Usi il secondo se, oltre all'indirizzo email, vuoi anche indicare un nome da mostrare all'utente:

MailAddress address = new MailAddress("wmartin@tiscali.it", "WMartin di Azienda srl");


Nel secondo parametro non devi inserire un altro indirizzo e-mail, ma un semplice nome descrittivo. Il client di posta userà questo nome solo in fase di visualizzazione, e mai come indirizzo di risposta.

Se invece scrivi così...
message.From = new MailAddress(indirizzo_di_posta,Indirizzo_da_mostrare)
...come secondo argomento indichi un indirizzo diverso, anziché un nome descrittivo, ma non ottieni alcun vantaggio perché il client di posta non userà mai quel nome come indirizzo di risposta. Anzi, può anche darsi che qualche client di posta la ritenga una tecnica di offuscamento del mittente, per esempio come quando Thunderbird ti segnala un "tentativo di frode" se il dominio presente nel testo di un link non corrisponde a quello dell'href.


Vorrei evitare che l'utente che riceve la email fosse tentato comunque ad usare quell'indirizzo per rispondere...

Questo è un problema che hanno un po' tutti, alcuni l'hanno risolto creando al volo degli indirizzi di posta virtuali sul proprio dominio, vedi eBay o Facebook. Rispondendo alla mail andrai a scrivere ad un loro indirizzo che lato server rimappa sull'indirizzo dell'utente e in più aggiunge la comunicazione al sistema di messaggistica integrato nell'applicazione. Questa però è una soluzione avanzata che non puoi mettere in pratica per via delle limitazioni imposte dal tuo provider.
Però puoi sempre ricorrere al Reply-To, mi sembra un compromesso accettabile.
E' ovvio che l'utente di sua iniziativa può sempre copiare l'indirizzo info@dominio.it e incollarlo nel campo A: di un nuovo messaggio... per evitare che si verifichino questi casi puoi spedire i messaggi da un indirizzo tipo noreply@dominio.it sul quale avrai configurato un autorisponditore (Aruba per esempio lo permette). Se qualche utente dovesse mai rispondere a quell'indirizzo, riceverà subito dopo un messaggio automatico scritto da te che li avviserà che l'email non è arrivata al giusto destinatario.

Spero che il Reply-To incontri le tue esigenze, considerate le limitazioni del provider...

Mi pare di capire che questo sia il metodo usato da te in aspitalia

No no, io non c'entro nulla ^^

ciao,
Modificato da BrightSoul il 22 giugno 2011 10.27 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
189 messaggi dal 03 ottobre 2006
Grazie ancora,
premetto che la soluzione con il "reply to" sarà quella che adotterò perchè funzionante ma c'è ancora qualcosa che non coincide probabilmente perchè non mi è chiara.

Non ne sono sicuro perchè posso provare a fare un nuovo esperimento solo stasera ma dai test che ho già fatto ricordo che non posso usare
MailAddress address = new MailAddress("wmartin@tiscali.it");
in quanto se uso un parametro solo sono obbligato a mettere info@dominio.it che è quello che non vorrei mostrare altrimenti mi risponde che le credenziali di accesso sono sbagliate.
Io sono rimasto sorpreso all'inizio di questa mia richiesta proprio per questo in quanto le credenziali di accesso non dovrebbero minimamente riguardare l'indirizzo che si usa in MailAddress.
Comunque stasera riprovo come suggerisci...
Capisco invece cosa intendi con il secondo parametro... se funzionasse con uno potendo mettere l'indirizzo che voglio io, non sarei nemmeno interessato ad inserire questa sorta di alias.
Grazie
Ciao
5.610 messaggi dal 09 febbraio 2002
Contributi

ricordo che non posso usare
MailAddress address = new MailAddress("wmartin@tiscali.it");


Sì, perché il provider ti impone di usare info@dominio.it come indirizzo mittente. Penso che non si possa fare altrimenti. Invece, nel reply-to puoi aggiungere l'indirizzo che vuoi.

MailMessage msg = new MailMessage();
msg.From = new MailAddress("info@dominio.it"); //qui abbiamo appurato che non puoi fare diversamente
msg.ReplyToList.Add(new MailAddress("wmartin@tiscali.it")); //ma nel reply-to puoi mettere un indirizzo qualsiasi.


L'utente vedrà l'email provenire da info@dominio.it, e non ci puoi far nulla purtroppo, ma facendo "Rispondi" scriverà all'altro indirizzo, wmartin@tiscali.it.

ciao

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC