On Wednesday, December 15, 2010 07:16:11 pm Brad Hards wrote:
> I've developed a (very) simple example of using libcurl to send SMTP - see
> attached patch.
Note to self: first read contribution guidelines in full, the post.

Corrected patch with 80 column limit respected, and in git format.

Sorry about that.

Brad
From 297c32b29d563d0ad407f6d53af1e103998c970b Mon Sep 17 00:00:00 2001
From: Brad Hards <[email protected]>
Date: Wed, 15 Dec 2010 19:27:28 +1100
Subject: [PATCH] Docs: add simple SMTP example

Add a simple SMTP example program, patterned after some of the
existing examples, and the curl application.
---
 docs/examples/simplesmtp.c |   71 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)
 create mode 100644 docs/examples/simplesmtp.c

diff --git a/docs/examples/simplesmtp.c b/docs/examples/simplesmtp.c
new file mode 100644
index 0000000..ce71c88
--- /dev/null
+++ b/docs/examples/simplesmtp.c
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+  CURL *curl;
+  CURLcode res;
+  struct curl_slist *recipients = NULL;
+  
+  /* this becomes the Return-Path header value */
+  static const char *from = "[email protected]";
+  
+  /* this becomes the Envelope-to header value */
+  static const char *to = "[email protected]";
+
+  curl = curl_easy_init();
+  if(curl) {
+    /* this is the URL for your mailserver - you can also use an smtps:// URL
+     * here */
+    curl_easy_setopt(curl, CURLOPT_URL, "smtp://mail.example.net.");
+    
+    /* Note that this option isn't strictly required, omitting it will result in
+     * libcurl will sent the MAIL FROM command with no sender data. That may
+     * result in the receiving SMTP system rewriting the header, which will look
+     * a bit strange. */
+    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, from);
+    
+    /* Note that the CURLOPT_MAIL_RCPT takes a list, not a char array */
+    recipients = curl_slist_append(recipients, to);
+    /* You really do have to set this option though - libcurl won't work without
+    /*  it */
+    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
+
+    /* You provide the remaining headers (including To:, Cc:, Bcc: and From:)
+     * and the body of the message as the "data" element. There are two choices,
+     * either:
+     * - provide a callback function and specify the function name using the
+     * CURLOPT_READFUNCTION option; or
+     * - just provide a FILE pointer that can be used to read the data from.
+     * The easiest case is just to read from standard input, (which is available
+     * as a FILE pointer) as shown here.
+     */
+    curl_easy_setopt(curl, CURLOPT_READDATA, stdin);
+
+    /* send the message (including headers) */
+    res = curl_easy_perform(curl);
+
+    /* free the list of recipients */
+    curl_slist_free_all(recipients);
+    
+    /* curl won't send the QUIT command until you call cleanup, so you should be
+     * able to re-use this connection for additional messages (setting
+     * CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and calling
+     * curl_easy_perform() again. It may not be a good idea to keep the
+     * connection open for a very long time though, and you do want to clean up
+     * in the end.
+     */
+    curl_easy_cleanup(curl);
+  }
+  return 0;
+}
-- 
1.7.3.3

-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to