Giter Club home page Giter Club logo

smtpclient-for-qt's Introduction

SMTP Client for Qt (C++) - Version 2.0 Linux Build

The SmtpClient for Qt is small library written for Qt 5 / 6 (C++ version) that allows application to send complex emails (plain text, html, attachments, inline files, etc.) using the Simple Mail Transfer Protocol (SMTP).

New in version 2.0:

  • Asynchronous & Synchronous working mode

  • Qt5/6 compatibility

  • Building as a shared library

  • code of SmtpClient refactored and partially rewrited

New in version 1.1:

  • TLS (STARTTLS) connection is now supported

  • multiple types of recipients (to, cc, bcc)

  • nested mime emails (mixed/alternative, mixed/related)

  • output compilant with RFC2045

SMTP Client for Qt supports

  • TCP and SSL connections to SMTP servers

  • SMTP authentication (PLAIN and LOGIN methods)

  • sending MIME emails (to multiple recipients)

  • plain text and HTML (with inline files) content in emails

  • multiple attachments and inline files (used in HTML)

  • different character sets (ascii, utf-8, etc) and encoding methods (7bit, 8bit, base64)

  • error handling

Examples

Lets see a simple example:

#include <QtCore>
#include "../src/SmtpMime"

int main(int argc, char *argv[])
{
{
    QCoreApplication a(argc, argv);

    // This is a first demo application of the SmtpClient for Qt project

    // Now we create a MimeMessage object. This is the email.

    MimeMessage message;

    EmailAddress sender("[email protected]", "Your Name");
    message.setSender(sender);

    EmailAddress to("[email protected]", "Recipient's Name");
    message.addRecipient(to);

    message.setSubject("SmtpClient for Qt - Demo");

    // Now add some text to the email.
    // First we create a MimeText object.

    MimeText text;

    text.setText("Hi,\nThis is a simple email message.\n");

    // Now add it to the mail

    message.addPart(&text);

    // Now we can send the mail
    SmtpClient smtp("smtp.gmail.com", 465, SmtpClient::SslConnection);

    smtp.connectToHost();
    if (!smtp.waitForReadyConnected()) {
        qDebug() << "Failed to connect to host!";
        return -1;
    }

    smtp.login("[email protected]", "your_password");
    if (!smtp.waitForAuthenticated()) {
        qDebug() << "Failed to login!";
        return -2;
    }

    smtp.sendMail(message);
    if (!smtp.waitForMailSent()) {
        qDebug() << "Failed to send mail!";
        return -3;
    }

    smtp.quit();

}

For more examples see the Wiki/Examples.

License

This project (all files including the demos/examples) is licensed under the GNU LGPL, version 2.1.

Copyright (c) 2014-2022 - Attila Tőkés

smtpclient-for-qt's People

Contributors

attila-tokes avatar bgallois avatar bjornthirud-fotoware avatar bluetiger9 avatar cardinotgv avatar edward-leblanc avatar kaffeine avatar naihil avatar sjinks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smtpclient-for-qt's Issues

Is SmtpClient threadsafe?

Hello!
DLL works perfectly!
But I'm interesting - is using a demo1 example thread safe?
I want to use dll without QApplication. It's possible?
I already check this and it works, but what about thread safety with multiple mail sends?

Example sending email from hotmail account

Your Library is very good. However, when i try to use hotmail account to send email, it will always have login error.

My connection is:
smtp = new SmtpClient("smtp.live.com", 587, SmtpClient::TlsConnection);

error is from emit smtpError(ResponseTimeoutError) which is respond from sendMessage("AUTH LOGIN");

TLS without Certificate

Using TLS, the 'connectToHost' consistently fails to a SMTP server that is proven to be working fine on other connections. With the SmtpClient-for-Qt, it reports a 'certificate not found' error.
Looking at smtpclient.cpp, it fails on the 'startClientEncryption' call, with the message 'The issuer certificate of a locally looked up certificate could not be found'.
I have read that certificates are (very?) rare in SMTP servers, and if so, I wonder why it fails for this reason?
I have an SSL-based SMTP server that works fine, so the 'SslConnection' is ok, just the 'TlsConnection' won't get past this point.
Thanks for any assistance.

Freeze on some systems

I've had reports from some users that it freezes on sending the email, the application locks up and the email never sends.

Unfortunately not got a clue what is causing the issue, some have anti virus set up, and others do not.

Same code works completely fine for me.

For now I've to pull this out of some of my code, and leave it in the one part where it doesn't really matter so much (Breakpad call back).

:-1: error: cannot find -lSMTPEmail

Thank you for the the libraries!

I have only been using QT for approximately 5 weeks, so you can say that I am a beginner, and possibly this is a novice question.

I have this error when I run one of the demo files:
@ -1: error: cannot find -lSMTPEmail @

I think the error is caused in the .pro file after # Location of SMTP Library # is defined. Am I right in assuming the path is wrong or the file doesn't exist?

The only file I have found that contains 'SMTPEmail' is the Project located alongside the Readme.

By the way, I have read the readme for any initial setup instructions.

Thank you in advance!

Memory leaks in examples (and may be in code)

Hi, I noticed the following pattern in the examples:

message.setSender(new EmailAddress("[email protected]", "Your Name"));

It it also used when allocating mime parts and possibly in other places.

What bothers me in this case is that the EmailAddress object is allocated on the heap using new, but I don't see it being deleted anywhere. I know QT can automatically delete (Q)objects when their parent is deleted, but I don't see anywhere a parent to be set either, so by default it's null and no automatic deletion will happen.

Am I missing something, or there are memory leaks in all the examples and also in mimemessage.cpp?

Trying to send email With attchment

No Doubt this library is awesome Gr8 Work.

In my case i am trying to send email with formated string without attachment it works fine and show email send successfully but in case of attachment it show email send faild.

I am using Qt 5.2.1.

Please reply as soon as possible i have to use this lib in my project.

please help.

Build failed while trying to build in my ubuntu with Qt 4.8 version

Thanks for this great work but build failed in ubunu

I downloaded the zip file and tried to compile the source in Ubuntu with Qt 4. Compilation failed with the following error

(.text+0x18):-1: error: undefined reference to main' (.text+0x18):-1: error: undefined reference tomain'

Next release date

This is more of a question than issue...but

Are you planning to roll some of your changes (particularly memory leak fix) into a new release soon? Love the project! Thanks

dev branch: QTimer in QEventLoop

Apparently, running an application with multiple threads can cause issues with QTimers not running in the same thread/eventloop.
The QThread doesn't fire its timeout() signal to the QEventLoop if it is running in another thread.

To fix this, in SmtpClient::waitForEvent ,the timer could be created dynamically and parented to the QEventLoop:

    QEventLoop loop;
    QTimer *timer = new QTimer(&loop);
    ...
    loop.exec()
    delete timer;

For me, in this case, I can get the timer to timeout. I hope there is no extra risk/memory leak involving this.

Release mode failed to establish connection

Hi Attila

Your library works great whenever i run from the Qt Creator, i am able to send out emails, regardless of size now, yea, however, once i put the app into release mode, (yea i copied whatever necessarily library into my folder - QNetwork4, QCore etc), the app failed to establish connection with the server.

Tried on Windows(x86)/MSVC2010/demo2
Thanks in advance.

Build errors under windows

In src/SMTPEmail.pro the line DEFINE is incorrect. The correct is DEFINES, and thus it generates inconsistent DLL linkage errors when building with MSVC2010.

Getting linker error

I guess there are some libraries which I need to include, but they are not mentioned anywhere. Anyway, I just included the source folder in my includepath and tried to build it. With the basic example given in the doc, this is the error I am getting (platform - OS X Yosemite 10.10.2, Qt 5.3.1 32 bit)

Undefined symbols for architecture i386:
"SmtpClient::setPassword(QString const&)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"SmtpClient::connectToHost()", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"SmtpClient::quit()", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"SmtpClient::login()", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"SmtpClient::setUser(QString const&)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"SmtpClient::sendMail(MimeMessage&)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"SmtpClient::SmtpClient(QString const&, int, SmtpClient::ConnectionType)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"SmtpClient::~SmtpClient()", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeMessage::setSubject(QString const&)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeMessage::addRecipient(EmailAddress_, MimeMessage::RecipientType)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeMessage::addPart(MimePart_)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeMessage::setSender(EmailAddress_)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeMessage::MimeMessage(bool)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeMessage::~MimeMessage()", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"EmailAddress::EmailAddress(QString const&, QString const&)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"EmailAddress::~EmailAddress()", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeText::setText(QString const&)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeText::MimeText(QString const&)", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
"MimeText::~MimeText()", referenced from:
MailSender::MailSender() in some_app_library.a(MailSender.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *_* [MyApp.app/Contents/MacOS/MyApp] Error 1
22:36:24: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project MyApp (kit: MyApp)
When executing step 'Make'

Any idea how to fix this?

smtpError signal

The way smtpError signal have been defined in SmtpClient.h doesn't allow to link it with a custom slot.
It should be void smtpError(SmtpClient::SmtpError e)
(Qt 5.3.1)

Demo 2 crashed upon attaching images

Hi, i was looking for smtp client for Qt the other day and came across to your library. Honestly, it's great, however there's a bug/ issue with the library. Demo 2 eventually gone crashed when i try to attach image (200kb). When i plug the library into my project, able to send email with tiny image and rich html content. Great, but i need to attach a slightly larger image, can you help me on this? Thanks.

Crash in Win32 at SSLEAY32!BIO_f_ssl

First of all, hi and thank you for this smtp client. It's quite nice to work with :)

I have a little problem. It works ok in Linux, but when I take it to windows, even if it compiles without a hitch, the program crashes signaling at the function I put in the title.

I don't know how to debug this because I've never been able to produce a debug build in Windows due to some silly QNativeWifiEngine issue (I don't even know what that is, and I definitely don't use that in an implicit manner in my code, but that's another issue). In Linux I have no problem debugging, but the issue doesn't show there so...

Is there any requisite that you can think of, related to this ssl stuff, that I might be missing or that I might need to recompile againt my Qt version for this to work?

Thank you again :)

Missing const for argument of SmtpClient::setHost

void SmtpClient::setHost(QString &host)

should be:

void SmtpClient::setHost(QString const &host)

Yes, it's marked as deprecated, but if that's the case then the constructor ought to be RAII; not defaulted.

Response Timeout for DATA Termination final period (.)

  1. Accroding to this:
    http://tools.ietf.org/html/rfc5321#section-4.5.3.2.6
    & this:
    http://tools.ietf.org/html/rfc1047
    --> The timeout for data termination should be at least 5 minutes in case some mailers require more processing after the final dot.

I actually got ResponseTimeoutException in SmtpClient::waitForResponse() after sending the final dot for my HTML message inserted with an image of just ~25KB.

& BTW, the default timeout of QAbstractSocket wait function is 30000 ms (30s)


  1. Just to be curious, why do you specify only have only 1 type of exception (ResponseTimeoutException) while there are various type of SmtpError...or it's left to us to customize exception handlers as well as to create slots for emit smtpError() signals ?

waitForConnected

Dear Tőkés,
first of all compliments for your work.
I've a problem with a smtp server, every time the socket->waitForConnected fails
but the smpt setting are correct, if i use them in the mail client everythings works.
I can't find a solution...

Could you help me?

Greetings
Andrea

attaching unreadable file

not serious, but if i attach a unreadable (eg missing) file, no error detection while sending. the receiver get's a uncomplete mail.
eg mimefile.cpp, line 49, no check if file.open failed. it's not safe to throw here an exeception because the network-stream is active.

Silence unused parameter warning in SmtpClient

Typically when compiled with strong warnings, etc, for non-debug version.

Index: src/smtpclient.cpp
===================================================================
--- src/smtpclient.cpp
+++ src/smtpclient.cpp
@@ -599,6 +599,8 @@
 void SmtpClient::socketError(QAbstractSocket::SocketError socketError) {
 #ifndef QT_NO_DEBUG
     qDebug() << "[Socket] ERROR:" << socketError;
+#else
+    Q_UNUSED(socketError);
 #endif
     emit error(SocketError);
 }

Cannot connect to smtp.1and1.com

I was able to succesfully connect to smtp.gmail.com in SSL and TLS mode. Thanks to the wonderful library.

But i am facing issues while connecting to smtp.1and1.com. As per link [ http://www.tenvis.com/support_service-64.html ], smtp.1and1.com support TLS mode. I am wondering why i am not even able to connect.

I am getting a "Connection Failed" error.

When i use TCP connection mode its giving me error at the following code.

// Sending command: AUTH LOGIN
sendMessage("AUTH LOGIN");

v1.1 can not be build for Qt4

src/mimemessage.cpp: In member function ‘virtual QString MimeMessage::toString()’:
src/mimemessage.cpp:265:83: error: ‘RFC2822Date’ is not a member of ‘Qt’
mime += QString("Date: %1\r\n").arg(QDateTime::currentDateTime().toString(Qt::RFC2822Date));

RFC2822Date is not present in Qt 4.8.7, only Qt5.

Google SMTP stopped working

Hi

In early January my application, which makes use of SmtpClient-for-Qt for sending emails for a gmail server, stopped working.

Do you know why it would have stopped working? Could it be that Google's Oauth 1.0 API has now been deprecated?

If this is the case would you be able to implement the new Oauth 2.0 protocol?

Problem with deployment

I wrote an app that use SmtpClient dll, when I deploy the app in a folder with all QT's dll in my PC works fine, the app connect with email server and send messages with no problems, but when I copy the folder to another PC the app is not working, do not connect with server and do not send messages.

Can't connect, no response from server. But from QtCreator is DOES work

Hello.

I have a strange issue, let's see if someone has an idea what this could be about.

I am using this client through smtp.gmail.com. In Linux I have no problem with the debug build.

Then I have several Windows VMs, with different win versions hosted on them. In Windows, the machine which has qtcreator on it can send emails via smtp with this lib.

Then I have two different vms, one with xp, one with vista. Neither of them can send emails. The error is triggered by connectToHost() so it doesn't even reach the stage where ssl and login issue could exist, and the value returned by getResponseText() is an empty string, so I am 100% blind about what happens in the middle.

Since it works in the machine with qtcreator, I assume it might be a lib I am missing or something like that. But dependency walker doesn't show up anything relevant, and I have packed in the bundle the same ssleay32.dll and libeay32.dll that I am using in the windows qtcreator vm.

Is there any other file from openssl that needs to be included so that I can access smtp.google.com on port 465?

I also tried turning the windows firewall off, though that shouldn't be an issue since it's MY machine which is starting the ocnnection, but it didn't make a difference.

Any pointer is welcome.

Thank :)

Qt 5 / SmtpMime - Compile Issues

Hi,

Can you help? I have put all the src files in my applications folder and then done the following:-

#include "SmtpMime"

void MainWindow::SendConfirmationEmail(QString strOrderCode)
{
    SmtpClient smtp("Medical-Srv01", 25, SmtpClient::SslConnection);

    smtp.setUser("[email protected]");
    smtp.setName("Automated Information");

    MimeMessage message;

    message.setSender(new EmailAddress("[email protected]", "Automated Information"));
    message.addRecipient(new EmailAddress("[email protected]", "Carl E Ogden"));
    message.setSubject("SmtpClient for Qt - Demo" + strOrderCode);

    // Now add some text to the email.
    // First we create a MimeText object.

    MimeText text;

    text.setText("Hi,\nThis is a simple email message.\n");

    // Now add it to the mail

    message.addPart(&text);

    // Now we can send the mail

    smtp.connectToHost();
    smtp.login();
    smtp.sendMail(message);
    smtp.quit();

}

When I compile I get 19 errors that read:-

EmailRoutines.obj:-1: error: LNK2019: unresolved external symbol "public: virtual __thiscall SmtpClient::~SmtpClient(void)" (??1SmtpClient@@UAE@XZ) referenced in function "private: void __thiscall MainWindow::SendConfirmationEmail(class QString)" (?SendConfirmationEmail@MainWindow@@AAEXVQString@@@z)

In my .pro file I do have

QT += core gui

Do I need to remove this and add "qtgui" to each and every .cpp file so my gui appears?

Sorry for these questions, I am new to QT/C++ and trying to change my app from VB.NET 2010 to QT so I can convert to PC/Mac/Linux!

Any help greatfully received.

Cheers
Carl.

Timeout in all waitFor methods is useless

The QTimer::singleShot() should be called directly after creating the QEventLoop not after calling the QEventLoop::exec() method, otherwise the loop will never exit after the timeout.

Is it possible to sent email as anonymous using this library ?

Is it possible to sent email as anonymous using this library ?.

My purpose is just to sent an information from my Qt application to an E-Mail address. Hence there is no meaning in providing sender information. What all modifications i need to do to make it possible ?

emit SmtpError(ConnectionTimeoutError);

in smtpclient.cpp, after startClientEncryption on failed waitForEncrypted
emit SmtpError(ConnectionTimeoutError);
should be
emit smtpError(ConnectionTimeoutError);
?

Issue with

Issue sometimes coming up failed even though succeeded to send.

Small change required to fix in the SmtpClient::waitForResponse routine.
void SmtpClient::waitForResponse()
{
do {
if (!socket->waitForReadyRead(responseTimeout))
{
emit smtpError(ResponseTimeoutError);
throw ResponseTimeoutException();
}
if(socket->isOpen()){ // <<-- added this if to solve issue, suspect the issue was related to the server I am using.
while (socket->canReadLine()) {
// Save the server's response
responseText = socket->readLine();

            // Extract the respose code from the server's responce (first 3 digits)
            responseCode = responseText.left(3).toInt();

            if (responseCode / 100 == 4)

                emit smtpError(ServerError);

            if (responseCode / 100 == 5)
                emit smtpError(ClientError);

            if (responseText[3] == ' ') { return; }
        }
    }
} while (true);

}

Unicode Messages

i tried to send a UTF-8 string (Arabic) via your lib but i receive it as unreadable shapes , is there a fix for that ??

Memory leak in Example 2

I believe there's a memory leak in Example 2 as written. As far as I can tell, the second MimeAttachment added to the message isn't ever deallocated because message doesn't take ownership of the parts added with MimeMessage::addPart().

Is that correct?

building for windows

hello!
please, help me with building for windows. on linux everything is going perfectly.
but on windows:
C:\QtProjects\atmail\emailaddress.cpp:23: warning: 'EmailAddress::EmailAddress(const QString&, const QString&)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
EmailAddress::EmailAddress(const QString & address, const QString & name)
^
C:\QtProjects\atmail\emailaddress.cpp:23: error: undefined reference to `_imp___ZTV12EmailAddress'

and many other similar messages. what am i doing wrong? thank you

Possible memory leak.

Each time you send a new email the memory consumption increases by a little bit. This could become a problem if you keep the client open for a long time.

Not sure where the leak is yet though.

Tested in:
-MacOS Mavericks
-Qt 5.3
-Using Demo1

Qt5

Dear Tőkés
Do you plan to lift your great library to Qt5?
(replace all toAsci with toLatin?)
Greetings, Reto

MimeMessage: memory leaks

Hi. I bet you have memory leaks in the MimeMessage class:
QList<EmailAddress*> recipientsTo, recipientsCc, recipientsBcc; - element pointers are not deleted anywhere while corresponding set-methods like addRecipient supposedly should set ownership to MimeMessage's object (?). At least Qt itself does things in that way. Otherwise you should rewrite your examples cause there are memory leaks definitely.

Email of Non-Latin character message

In demo2 (the one having GUI) example:
I tried to compose an email with the following non-latin characters but they are not correctly displayed in mail clients:

你好吗
سنة جديدة سعيدة
ƒ€†‡ˆ‰Š‹ŒŽ‘’“”•–— ˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³µ´µ¶·¸¹
º»¼½¾

And does SmtpClient already support the RFC6531 on Internationalized SMTP:
http://tools.ietf.org/html/rfc6531

It seems that we need to add:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
in SendEmail constructor!

Trouble using Win8

hi, I tried to use the dll (built with MinGW in Win7, x64) with Win8 - although I use the same parameters, I am unable to send mails through Win8; the only error I get is "Unable to connect to host".
Is there any dependency missing?

Problem running on arm system

I couldn't figure out how to make it work on Raspberry Pi.
Could anyone help?
I keep getting this error message.

error while loading shared libraries: libSMTPEmail.so.1: cannot open shared object file: No such file or directory

Q_DECLARE_METATYPE(SmtpClient::SmtpError)

First, thank you for the great helpful library.

It seems smtpError signal defined in SmtpClient.h doesn't allow slots outside of the library(SmtpClient-for-Qt) to receive it.

If Q_DECLARE_METATYPE(SmtpClient::SmtpError) is declared in SmtpClient.h, my application can receive the signal and know what kinds of error occurred in SmtpClient.

Or, is there a better way to obtain error details from outside of the library?

Thanks,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.