Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#/MONO] Emails verzenden via GMail

Pagina: 1
Acties:
  • 303 views sinds 30-01-2008
  • Reageer

  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

Topicstarter
Ik probeer een soort van bot te maken die in onze mailinglist voor een beetje vertier kan zorgen. En mijn idee was om dit via C# in mono te doen omdat het op mijn linux server moet draaien.*

Alles leuk en aardig, maar na wat proberen kwam ik erachter dat Ik System.Net.Mail niet kon gebruiken. Blijkt dat die nog niet ondersteund wordt, pas in versie 2.0... :'( (bron)

However, dan hebben we nog altijd System.Web.Mail. Zou moeten werken. Echter als ik de code van The Code Project gebruik krijg ik constant een error... :/

Server reponse: '530 5.7.0 Must issue a STARTTLS command first k28sm1441051ugd';Status code: '530';Expected status code: '250';Last command: 'MAIL FROM: <email@gmail.com>'


Hierop googlen (of gedeeltes hiervan) kom ik vanalles tegen, maar totaal niets wat me helpt... :(

Iemand verder nog ideeën? Ik heb in de settings voor het gebruikte account POP aanstaan, beide poorten al eens gebruikt. (465, 587)

Voor de volledigheid de gebruikte code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System;
using System.Net;
using System.Web.Mail;

namespace TCITBot
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Sending mail...");

            // Mail initialization
            MailMessage mailMsg = new MailMessage();

            mailMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
            mailMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "from@gmail.com");
            mailMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "mypass");
            mailMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "587");
            mailMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");


            mailMsg.From = "from@gmail.com";
            mailMsg.To = "to@gmail.com";
            mailMsg.Subject = "=)";
            mailMsg.BodyFormat = MailFormat.Text;
            mailMsg.Body = "Mono rocks!";

            SmtpMail.SmtpServer = "smtp.gmail.com";

            try
            {
                SmtpMail.Send(mailMsg);
                Console.WriteLine("Message send!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Oops: " + ex.Message);
            }
        }
    }
}


* Ik heb niet zoveel kaas gegeten van perl etc, en om nou in C++ te gaan proggen zie ik ook niet echt zitten... :/

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:42
Het lijkt mij dat het praten met de SMTP server (smtp.gmail.com) niet goed gaat. Kun je niet die van je eigen provider gebruiker of (nog beter) die van de linuxmachine zelf (aka localhost)?

(trouwens: google geeft genoeg resultaat)

[ Voor 24% gewijzigd door Kalentum op 25-09-2007 15:20 ]


  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

Topicstarter
Klopt, ik kan die van mijn eigen provider gebruiken, maar zoals mijn vraag was, ik wil graag die van GMail gebruiken.

Het gaat idd allemaal over die SSL verbinding, die is kachel.

En zoals ik ook zei geeft Google heel veel resultaat; maar met die resultaten kan ik weinig. Verfijn die search van je eens naar C# en dan Mono in 't bijzonder...? Blijft er (helaas) erg weinig van over, behalve mensen die dezelfde vraag stellen... ;)

[ Voor 10% gewijzigd door Rowdy.nl op 25-09-2007 15:47 ]

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je zou ook gewoon het programma 'mail' kunnen aanroepen welke op vrijwel elke linux distributie is te vinden. Ik weet niet hoever het project inmiddels is, maar je kunt eventueel ook gmail-api kunnen gebruiken.

Een andere mogelijkheid is natuurlijk PHP (meestal beschikbaar als 'php5-cli' oid).

Maar met een beetje creativiteit moet je toch een eind kunnen komen.

If it isn't broken, fix it until it is..


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Euh, waarom gebruik je eigenlijk niet System.Web.Mail (zoals gebruikelijk in Windows .NET versies 1.x)?

Die werkt al tijden. Heb net mijn eigen qmail proggie bekeken en daarin gebruik deze namespace. System.Net.Mail is inderdaad .NEt 2.0 en hoger. Omdat de verschillen tussen de twee namespaces vrij minimaal zijn, is dit voor het mono team nou niet echt een show stopper.

If it isn't broken, fix it until it is..


  • lier
  • Registratie: Januari 2004
  • Laatst online: 17:54

lier

MikroTik nerd

Niemand_Anders schreef op dinsdag 25 september 2007 @ 15:56:
Euh, waarom gebruik je eigenlijk niet System.Web.Mail (zoals gebruikelijk in Windows .NET versies 1.x)?

Die werkt al tijden. Heb net mijn eigen qmail proggie bekeken en daarin gebruik deze namespace. System.Net.Mail is inderdaad .NEt 2.0 en hoger. Omdat de verschillen tussen de twee namespaces vrij minimaal zijn, is dit voor het mono team nou niet echt een show stopper.
using System;
using System.Net;
using System.Web.Mail;

Eerst het probleem, dan de oplossing


  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

Topicstarter
Thnx lier.

@Niemand_anders, ik kan heel veel andere dingen doen; maar ik wil graag icm mono én GMail mail verzenden... Ik wil platform én systeem onafhankelijk zijn... ;)

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


  • lier
  • Registratie: Januari 2004
  • Laatst online: 17:54

lier

MikroTik nerd

Zou je eens via telnet naar de server kunnen kijken of je mail kan versturen ?

Oftewel:

telnet smtp.gmail.com 25
mail from:[afzender@gmail.com]
rcpt to:[aan]
data:[onzin.]

Zou je het ook eens van een Windows client kunnen draaien (de .NET oplossing) ?

Eerst het probleem, dan de oplossing


Verwijderd

Denk dat je een ander smtp component moet gebruiken, smtp over ssl is iets anders natuurlijk dan gewoon smtp over een andere poort gooien.

  • kunnen
  • Registratie: Februari 2004
  • Niet online
Werkt gmail niet op een niet-standaard SMTP poort?

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:42
smtp.gmail.com gebruikt TLS en dat mono-mail componentje kan dat gewoon niet. Dus zelf met sockets in de weer, een ander component gebruiken of voor de simpele, flexibele, systeem- en platformonafhankelijke oplossing gaan:

De eigen mailserver!

Nu ben je afhankelijk van Google. Je kan die mailserver configureren om te relayen naar elke smtp server, waaronder die van Google. Als google failliet gaat kun je alsnog switchen naar een andere SMTP server, zonder dat je je programma opnieuw moet compileren. Is dat niet mooi?

http://souptonuts.sourceforge.net/postfix_tutorial.html

  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

Topicstarter
@Rutger; mijn server kan al mails verzenden, geen probleem. Maar dat is geen uitdaging. Ik wil graag dit probleem tackelen en geen concessies doen of workarounds gebruiken.

Indien het echt niet gaat; dan dikke pech, op dat moment ga ik wat anders gebruiken/verzinnen. Je beweerd dat het mono mail component dit niet kan. Je bedoeld dus eigenlijk dat de mono implementatie van de System.Web.Mail niet volledig is? (Want 't standaard (Windows) .NET framework kan dat wel)
Heb je hier ergens bewijs/documentatie over?

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


  • lier
  • Registratie: Januari 2004
  • Laatst online: 17:54

lier

MikroTik nerd

Misschien dat je deze link eens kan bekijken ?
Verder lijkt er een patch te bestaan: mailwisseling
Als google failliet gaat
Net zoiets als zeggen dat Microsoft failiet gaat (ik zeg niet dat het niet kan, maar waarschijnlijk...?)
offtopic:
Ben erg lui, heb me (nog) niet verdiept in Mono...

[ Voor 30% gewijzigd door lier op 26-09-2007 08:56 ]

Eerst het probleem, dan de oplossing


  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 21:18

Koetjeboe

Boe, zegt de koe

Mono ondersteunt 2.0 toch ook gewoon prima? De Gmcs compiler moet je hebben voor 2.0 (Zie ook http://www.mono-project.com/CSharp_Compiler)

Of is dit een probleem?

  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

Topicstarter
Koetjeboe schreef op woensdag 26 september 2007 @ 09:36:
Mono ondersteunt 2.0 toch ook gewoon prima? De Gmcs compiler moet je hebben voor 2.0 (Zie ook http://www.mono-project.com/CSharp_Compiler)

Of is dit een probleem?
Mono ondersteund .NET 2.0 wel, maar die feature voor SSL in System.Net.Mail wordt pas in Mono 2.0 ondersteund... :/

mono # mono GMail2.0.exe
Sending mail...

Unhandled Exception: System.NotImplementedException: The requested feature is not implemented.
  at System.Net.Mail.SmtpClient.ChangeToSSLSocket () [0x00000]
  at System.Net.Mail.SmtpClient.InitiateSecureConnection () [0x00000]
  at System.Net.Mail.SmtpClient.Send (System.Net.Mail.MailMessage message) [0x00000]
  at Bot.MainClass.Main (System.String[] args) [0x00000]


Overigens ben ik idd zo stom geweest om alleen met mcs te compileren, dus nu nogmaals, maar dan met gmcs. Dan krijg ik dus leuke andere errors:

mono GMail.exe
Sending mail...
Oops: An exception was thrown by the type initializer for System.Net.Dns

Bij de andere versie (die gebruik maakt van System.Net.Mail) krijg ik overigens een enorme exception terug over dat er iets mis is met de machine.config. Als ik op die twee errors ga zoeken vind ik daar wel wat over terug, en kan ik dat oplossen door de /etc/mono/2.0/machine.config leeg te maken...

Als ik dat doe en vervolgens nogmaals run, inderdaad, voor de versie die System.Net.Mail krijg ik bovenstaande NotImplementedException, en voor de versie die gebruik maakt van System.Web.Mail krijg ik een andere foutmelding:

mono # mono GMail.exe
Sending mail...
Oops: Cannot load Mono.Security.dll

However staat die gewoon in de map /usr/lib/mono/2.0/ ? En compileren met de optie /r:Mono.Security.dll lost dit ook niet op...?

Ik ben nu de laatste (unstable) versie aan het compileren, eens kijken hoever dit gaat... De laatste stable versie voor Gentoo is 1.2.4 (oid) en ik ben nu dus 1.2.5.1. Ben d'r bang voor dat dit helaas geen oplossing zal bieden, but who know's...? ;)

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.

Pagina: 1