Ethernet Shield ile e-mail gönderme Acill yardım
  • Merhabalar ben projem için ethernet shield ile email göndermek istiyorum. Arduino uno ve klon ethernet shield kullanıyorum. Kullandığım kodlar aşağıdaki şekilde. Burada ip adresimi değiştiriyorum. bunun dışında hangi satırları değiştirmeliyim. mesela server yazan kısma kendi mail adresimimi yazmalıyım yoksa mail.google.com (gmail hesabı kullanacağım) mı yazmalıyım. Bunları yazdığımda ve düzenlediğimde serial monitorde sırasıyla şu şekilde.
    Ready. Press 'e' to send.
    connected

    Timeout
    Email failed

    Yani sorun ercv fonksiyonunda client.available() sıfır dönüyor. client.available neden sıfır dönüyor olabilir sizce?
    proje için bir hafta vaktim kaldı. yardımcı olursanız çok sevinirim.Şimdiden teşekkürler.

    #include
    #include

    // this must be unique
    byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };
    // change network settings to yours
    IPAddress ip( 192, 168, 2, 2 );
    IPAddress gateway( 192, 168, 2, 1 );
    IPAddress subnet( 255, 255, 255, 0 );

    // change server to your email server ip or domain
    // IPAddress server( 1, 2, 3, 4 );
    char server[] = "email.yourdomain.com";

    EthernetClient client;

    void setup()
    {
    Serial.begin(9600);
    pinMode(4,OUTPUT);
    digitalWrite(4,HIGH);
    Ethernet.begin(mac, ip, gateway, gateway, subnet);
    delay(2000);
    Serial.println(F("Ready. Press 'e' to send."));
    }

    void loop()
    {
    byte inChar;

    inChar = Serial.read();

    if(inChar == 'e')
    {
    if(sendEmail()) Serial.println(F("Email sent"));
    else Serial.println(F("Email failed"));
    }
    }

    byte sendEmail()
    {
    byte thisByte = 0;
    byte respCode;

    if(client.connect(server,25)) {
    Serial.println(F("connected"));
    } else {
    Serial.println(F("connection failed"));
    return 0;
    }

    if(!eRcv()) return 0;
    Serial.println(F("Sending helo"));

    // change to your public ip
    client.println(F("helo 1.2.3.4"));

    if(!eRcv()) return 0;
    Serial.println(F("Sending From"));

    // change to your email address (sender)
    client.println(F("MAIL From: "));

    if(!eRcv()) return 0;

    // change to recipient address
    Serial.println(F("Sending To"));
    client.println(F("RCPT To: "));

    if(!eRcv()) return 0;

    Serial.println(F("Sending DATA"));
    client.println(F("DATA"));

    if(!eRcv()) return 0;

    Serial.println(F("Sending email"));

    // change to recipient address
    client.println(F("To: You "));

    // change to your address
    client.println(F("From: Me "));

    client.println(F("Subject: Arduino email test\r\n"));

    client.println(F("This is from my Arduino!"));

    client.println(F("."));

    if(!eRcv()) return 0;

    Serial.println(F("Sending QUIT"));
    client.println(F("QUIT"));

    if(!eRcv()) return 0;

    client.stop();

    Serial.println(F("disconnected"));

    return 1;
    }

    byte eRcv()
    {
    byte respCode;
    byte thisByte;
    int loopCount = 0;

    while(!client.available()) {
    delay(1);
    loopCount++;

    // if nothing received for 10 seconds, timeout
    if(loopCount > 10000) {
    client.stop();
    Serial.println(F("\r\nTimeout"));
    return 0;
    }
    }

    respCode = client.peek();

    while(client.available())
    {
    thisByte = client.read();
    Serial.write(thisByte);
    }

    if(respCode >= '4')
    {
    efail();
    return 0;
    }

    return 1;
    }


    void efail()
    {
    byte thisByte = 0;
    int loopCount = 0;

    client.println(F("QUIT"));

    while(!client.available()) {
    delay(1);
    loopCount++;

    // if nothing received for 10 seconds, timeout
    if(loopCount > 10000) {
    client.stop();
    Serial.println(F("\r\nTimeout"));
    return;
    }
    }

    while(client.available())
    {
    thisByte = client.read();
    Serial.write(thisByte);
    }

    client.stop();

    Serial.println(F("disconnected"));
    }
  • sanirim su alana char server[] = "email.yourdomain.com";
    mail serverinizin post giris adresi yazilacak.

    örnegin google mail Server icin
    char server[] = "smtp.gmail.com ";

    birde surada
    client.println(F("To: You ")); // Gidecek kisinin mail adresi

    client.println(F("From: Me ")); // Sizin kendi mail adresiniz yani googledeki!

    yada surdaki örnegi bir inceleyin.
    http://sinocgtchen.blogspot.tw/2011/11/email-alarm-arduino-ethernet-shield-pir.html
  • char server[] = "smtp.gmail.com "; bu şekilde yazmayı denedim if(client.connect(server,25)) satırına takılıyor ve bağlantı hatası veriyor. sunucu ip adresini nasıl bulacağımı da bilmiyorum. email konusunda başka örnekleri de denedim ama bu server kısmına ne yazacağım. kendi mailimi yazınca connected oluyor. if satırının içine giriyor ama bu kez de ercv() de client.available() hep sıfır döndüğü için zaman aşımına uğruyor.
  • Google veya yahoo yu smtp server gibi kullanamazsiniz izin vermiyorlar. Kendi mail sunucunuzu kullanmaniz gerek servis saglayicidan parametreleri ogrenin outlook programinin kurulumunu yapin pop3 le mail atin alin sonra arduini programda yerlerine koyar mail atarsiniz sifreleri de base64 le yollamaniz lazim linktekj programi ben pek begdnmedim arduino.cc deki orneklere bakin
  • tamam çok teşekkür ederim hocam dediklerinizi deneyeceğim.
  • tamamdır hocam çalıştı teşekkürler.
  • Hangi örneği çalıştırdınız, bir de ne tür değişiklikler yaptınız
  • Merhaba bende Arduino uno + w5100 ile mail göndermek istiyorum ama olmadı. fatma_y siz hangi kodları kullanarak çalıştırabildiniz paylaşırsanız sevinirim . Teşekkürler.
  • Tekrardan merhaba, kendi sorunumun cevabını kendim vermek istedim 2 gündür uğraşlarım sonucu çalışır bir kod buldum. gerekli yerlere gerekli ayarları yazarak çalıştırabilirsiniz bazı yerleri Türkçeleştirdim ayrıca mail adresi ve şifrenizi base64 ile şifrelemeniz gerekli, ben kendi SMTP server ımı kullanarak mail attım. siz https://www.smtpcorp.com/ dan hesap açarak SMTP kullanabilirsiniz. kodlar arasında bağlantı yapıldığında led yakıyor o kısmı isterseniz çıkarabilirsiniz. include kütüphane isimlerinin başlarındaki büyük küçük işaretlerini kaldırdım siz eklersiniz.

    #include Dhcp.h
    #include Dns.h
    #include Ethernet.h
    #include EthernetClient.h
    #include EthernetServer.h
    #include EthernetUdp.h
    #include util.h
    #include Time.h

    #include SPI.h

    /*
    Blink
    Turns on an LED on for one second, then off for one second, repeatedly.

    This example code is in the public domain.
    */

    #include Ethernet.h

    #include SPI.h

    //byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 90-A2-DA-00-EE-58
    //byte ip[] = { 192, 168, 9, 177 };
    //byte server[] = { 192, 168, 9, 6 }; // Mail server address MODIFY THIS FOR THE TARGET DOMAIN's MAIL SERVER

    byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xEE, 0x58 }; //physical mac address
    byte ip[] = {192,168,1,30}; // ip in lan

    byte smtp[] = {90,80,226,85}; //smtp server ip

    EthernetClient client;
    //EthernetServer server(25);
    //Client client(server, 25);
    //Client client;

    // Pin 13 has an LED connected on most Arduino boards.
    // give it a name:
    int led = 9;
    int ms = 1000;

    // the setup routine runs once when you press reset:
    void setup() {
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT);

    Ethernet.begin(mac, ip);
    Serial.begin(9600);
    delay(1000);

    Serial.println("baglaniyor...");

    // EthernetClient client = server.available();

    if (client.connect(smtp,25)) {
    Serial.println("baglandi");
    client.println("EHLO kltan");
    client.println("AUTH LOGIN"); //see "http://base64-encoder-online.waraxe.us/" sitesini kullanarak encode edebilirsiniz
    client.println("bWFpbEBhZHJlc2luaXouY29t"); //Type mail@adresiniz.com encode edilmiş hali
    client.println("c2lmcmVuaXo="); //Password kısmınıda encode etmelisiniz
    client.println("MAIL FROM:"); //Karşı tarafta gözükmesini iztediğiniz adres
    client.println("RCPT TO:"); //Mailin gideceği adres
    client.println("DATA");
    client.println("from:mail@adresiniz.com");
    client.println("to:gidecek@adres.com");
    client.println("Konu: Arduino Ethernet shild test mail");
    client.println();
    client.println("Mesajınızın ilk satırı.");
    client.println("Mesajınızın ikinci satırı.");
    client.println(".");
    client.println(".");
    client.println("QUIT");
    } else {
    Serial.println("Baglanti hatasi");
    }
    }

    // the loop routine runs over and over again forever:
    void loop() {
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
    delay(ms); // wait for a second
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
    delay(ms); // wait for a second

    if (client.available()) {
    char c = client.read();
    Serial.print(c);
    }
    ;;
    if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for( ;; )
    ;
    }
    }



Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.