return from_addr;
}
+static const char *
+guess_from_received_header (notmuch_config_t *config, notmuch_message_t *message)
+{
+ const char *received,*primary;
+ char **other;
+ char *by,*mta,*ptr,*token;
+ char *domain=NULL;
+ char *tld=NULL;
+ const char *delim=". \t";
+ size_t i,other_len;
+
+ received = notmuch_message_get_header (message, "received");
+ by = strstr (received, " by ");
+ if (by && *(by+4)) {
+ /* sadly, the format of Received: headers is a bit inconsistent,
+ * depending on the MTA used. So we try to extract just the MTA
+ * here by removing leading whitespace and assuming that the MTA
+ * name ends at the next whitespace
+ * we test for *(by+4) to be non-'\0' to make sure there's something
+ * there at all - and then assume that the first whitespace delimited
+ * token that follows is the last receiving server
+ */
+ mta = strdup (by+4);
+ if (mta == NULL)
+ return NULL;
+ token = strtok(mta," \t");
+ if (token == NULL)
+ return NULL;
+ /* Now extract the last two components of the MTA host name
+ * as domain and tld
+ */
+ while ((ptr = strsep (&token, delim)) != NULL) {
+ if (*ptr == '\0')
+ continue;
+ domain = tld;
+ tld = ptr;
+ }
+
+ if (domain) {
+ /* recombine domain and tld and look for it among the configured
+ * email addresses
+ */
+ *(tld-1) = '.';
+ primary = notmuch_config_get_user_primary_email (config);
+ if (strcasestr (primary, domain)) {
+ free (mta);
+ return primary;
+ }
+ other = notmuch_config_get_user_other_email (config, &other_len);
+ for (i = 0; i < other_len; i++)
+ if (strcasestr (other[i], domain)) {
+ free (mta);
+ return other[i];
+ }
+ }
+
+ free (mta);
+ }
+
+ return NULL;
+}
+
static int
notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_t *query)
{
char *reply_headers;
for (messages = notmuch_query_search_messages (query);
- notmuch_messages_has_more (messages);
- notmuch_messages_advance (messages))
+ notmuch_messages_valid (messages);
+ notmuch_messages_move_to_next (messages))
{
message = notmuch_messages_get (messages);
from_addr = add_recipients_from_message (reply, config, message);
+ if (from_addr == NULL)
+ from_addr = guess_from_received_header (config, message);
+
if (from_addr == NULL)
from_addr = notmuch_config_get_user_primary_email (config);
char *reply_headers;
for (messages = notmuch_query_search_messages (query);
- notmuch_messages_has_more (messages);
- notmuch_messages_advance (messages))
+ notmuch_messages_valid (messages);
+ notmuch_messages_move_to_next (messages))
{
message = notmuch_messages_get (messages);