END_TEST START_TEST(test_dbmail_message_construct) { const gchar *sender = "*****@*****.**"; const gchar *subject = "Some test"; const gchar *recipient = "<*****@*****.**> Bar"; gchar *body = g_strdup("\ntesting\n\nááááä\n\n"); gchar *expect = g_strdup("From: [email protected]\n" "Subject: Some test\n" "To: [email protected]\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: base64\n" "\n" "CnRlc3RpbmcKCuHh4eHk"); gchar *result; DbmailMessage *message = dbmail_message_new(); message = dbmail_message_construct(message,recipient,sender,subject,body); result = dbmail_message_to_string(message); fail_unless(MATCH(expect,result),"dbmail_message_construct failed\n%s\n%s", expect, result); dbmail_message_free(message); g_free(body); g_free(result); g_free(expect); body = g_strdup("Mit freundlichen Gr=C3=BC=C3=9Fen"); message = dbmail_message_new(); message = dbmail_message_construct(message,recipient,sender,subject,body); //printf ("%s\n", dbmail_message_to_string(message)); dbmail_message_free(message); g_free(body); }
int send_alert(uint64_t user_idnr, char *subject, char *body) { DbmailMessage *new_message; Field_T postmaster; char *from; int msgflags[IMAP_NFLAGS]; // Only send each unique alert once a day. char *tmp = g_strconcat(subject, body, NULL); char *userchar = g_strdup_printf("%" PRIu64 "", user_idnr); char handle[FIELDSIZE]; memset(handle, 0, sizeof(handle)); dm_md5(tmp, handle); if (db_replycache_validate(userchar, "send_alert", handle, 1) != DM_SUCCESS) { TRACE(TRACE_INFO, "Already sent alert [%s] to user [%" PRIu64 "] today", subject, user_idnr); g_free(userchar); g_free(tmp); return 0; } else { TRACE(TRACE_INFO, "Sending alert [%s] to user [%" PRIu64 "]", subject, user_idnr); db_replycache_register(userchar, "send_alert", handle); g_free(userchar); g_free(tmp); } // From the Postmaster. if (config_get_value("POSTMASTER", "DBMAIL", postmaster) < 0) { TRACE(TRACE_NOTICE, "no config value for POSTMASTER"); } if (strlen(postmaster)) from = postmaster; else from = DEFAULT_POSTMASTER; // Set the \Flagged flag. memset(msgflags, 0, sizeof(msgflags)); msgflags[IMAP_FLAG_FLAGGED] = 1; // Get the user's login name. char *to = auth_get_userid(user_idnr); new_message = dbmail_message_new(NULL); new_message = dbmail_message_construct(new_message, to, from, subject, body); // Pre-insert the message and get a new_message->id dbmail_message_store(new_message); uint64_t tmpid = new_message->id; if (sort_deliver_to_mailbox(new_message, user_idnr, "INBOX", BOX_BRUTEFORCE, msgflags, NULL) != DSN_CLASS_OK) { TRACE(TRACE_ERR, "Unable to deliver alert [%s] to user [%" PRIu64 "]", subject, user_idnr); } g_free(to); db_delete_message(tmpid); dbmail_message_free(new_message); return 0; }
/* * Send a vacation message. FIXME: this should provide * MIME support, to comply with the Sieve-Vacation spec. */ static int send_vacation(DbmailMessage *message, const char *to, const char *from, const char *subject, const char *body, const char *handle) { int result; const char *x_dbmail_vacation = dbmail_message_get_header(message, "X-Dbmail-Vacation"); if (x_dbmail_vacation) { TRACE(TRACE_NOTICE, "vacation loop detected [%s]", x_dbmail_vacation); return 0; } DbmailMessage *new_message = dbmail_message_new(); new_message = dbmail_message_construct(new_message, to, from, subject, body); dbmail_message_set_header(new_message, "X-DBMail-Vacation", handle); result = send_mail(new_message, to, from, NULL, SENDMESSAGE, SENDMAIL); dbmail_message_free(new_message); return result; }