.cmd_mail = client_default_cmd_mail,
.cmd_rcpt = client_default_cmd_rcpt,
.cmd_data = client_default_cmd_data,
+
+ .local_deliver = lmtp_local_default_deliver,
};
#define CLIENT_MAIL_DATA_MAX_INMEMORY_SIZE (1024*128)
+struct mail_storage;
+struct mail_deliver_context;
union lmtp_module_context;
struct lmtp_recipient;
struct client;
struct smtp_server_cmd_ctx *cmd,
struct smtp_server_transaction *trans,
struct istream *data_input, uoff_t data_size);
+
+ int (*local_deliver)(struct client *client,
+ struct lmtp_recipient *lrcpt,
+ struct mail_deliver_context *dctx,
+ struct mail_storage **storage_r);
};
struct client {
struct mail_deliver_session *session)
{
struct client *client = local->client;
- struct smtp_server_recipient *rcpt = llrcpt->rcpt->rcpt;
+ struct lmtp_recipient *lrcpt = llrcpt->rcpt;
+ struct smtp_server_recipient *rcpt = lrcpt->rcpt;
struct smtp_address *rcpt_to = rcpt->path;
unsigned int rcpt_idx = rcpt->index;
struct mail_storage_service_user *service_user = llrcpt->service_user;
&trans->timestamp);
dctx.delivery_time_started = delivery_time_started;
- if (mail_deliver(&dctx, &storage) == 0) {
+ if (client->v.local_deliver(client, lrcpt, &dctx, &storage) == 0) {
if (dctx.dest_mail != NULL) {
i_assert(local->first_saved_mail == NULL);
local->first_saved_mail = dctx.dest_mail;
return ret;
}
+int lmtp_local_default_deliver(struct client *client ATTR_UNUSED,
+ struct lmtp_recipient *lrcpt ATTR_UNUSED,
+ struct mail_deliver_context *dctx,
+ struct mail_storage **storage_r)
+{
+ return mail_deliver(dctx, storage_r);
+}
+
static uid_t
lmtp_local_deliver_to_rcpts(struct lmtp_local *local,
struct smtp_server_cmd_ctx *cmd,
struct smtp_server_transaction *trans,
string_t *headers);
+int lmtp_local_default_deliver(struct client *client,
+ struct lmtp_recipient *lrcpt,
+ struct mail_deliver_context *dctx,
+ struct mail_storage **storage_r);
+
void lmtp_local_data(struct client *client,
struct smtp_server_cmd_ctx *cmd,
struct smtp_server_transaction *trans,