Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sending messages without a subject #65

Closed
damien opened this issue Jul 3, 2012 · 9 comments
Closed

Sending messages without a subject #65

damien opened this issue Jul 3, 2012 · 9 comments

Comments

@damien
Copy link

damien commented Jul 3, 2012

Hey guys!

First off, thanks for mailboxer. Great piece of work!

That being said, is there any particular reason why a subject is required to send a message? I have a requirement to send messages without requiring a subject and ended up overriding the default send_message method like so:

# Override's Mailboxer's #send_message such that subjects are not required.
# @see https://github.com/ging/mailboxer/blob/56987403939d6077ddb72bc708df90ab6e672ab6/lib/mailboxer/models/messageable.rb#L48-57
# @param [Hash] opts An options hash used to configure and send a message
# @option [User, Array<User>] :to Users to send a message to
# @option [String] :subject An optional subject for this message (nil)
# @option [File] :attatchment An optional attatchment to include with this message (nil)
# @options [Boolean] :sanitize Weather or not to sanetize input (true)
def send_message(opts = {})
  recipients = opts.delete(:to)
  subject    = opts.delete(:subject) || ""
  body       = opts.delete(:body)
  attachment = opts.delete(:attatchment)
  sanitize   = opts.delete(:sanitize) || true

  convo = Conversation.new(subject: subject)

  message = messages.new(body: body, subject: subject, attachment: attachment)
  message.conversation = convo
  message.recipients = recipients.is_a?(Array) ? recipients : [recipients]
  message.recipients = message.recipients.uniq

  message.deliver(false, sanitize)
end

Here's what I'm wondering:

  1. Will this cause any issues with Mailboxer's data model?
  2. Are there any implications to making a subject optional that I should consider or be aware of?
  3. If everything here checks out, would you guys be open to me submitting this as a patch to send_message?
@Roendal
Copy link
Member

Roendal commented Jul 3, 2012

Hi @damien!

If mailboxer is somehow great is for people like you submitting new ideas ;)

There is no particular reason for subjet to be required, indeed it seems a great bug if you don't need to use them. We never faced this problem, so we never came up with a solution.

The answers for 1 and 2 are NO. There should be no problem with Mailboxer and, as far as I remember, no other implication is present.

I will happily accept this patch, but as long as this will require a new minor version because of the change, I think I should be a bit deeper.

The change from method(param A, param B, param C,..) to method(params={}) has been delayed because of my lack of time. There are many other methods in need of this change, ie: in Messageable reply, reply_to_sender, etc. or in Notification notify_all. Of course, the test related to them have to ve updated.

You did more than enough by opening this issue and letting us know the bug, but do you feel brave enough to help us by submitting this change?

Thanks, many many thanks!

@damien
Copy link
Author

damien commented Jul 3, 2012

@Roendal I was considering doing just that! I just wanted to make sure it would be an acceptable patch before I started any work.

I'm tight on time now, but I'll most likely be working on this tomorrow evening and/or this weekend. I'll update this issue as I make progress.

@Roendal
Copy link
Member

Roendal commented Jul 3, 2012

Take the time you need @damien!

Thanks again :)

@damien
Copy link
Author

damien commented Jul 11, 2012

Just an update; I'm currently working on this and it's turning out to be a bit more involved than I had originally anticipated. I'm doing a lot of updating of the test suite to get it green after changing most of the function signatures across the app. I'll definitely need a solid code review before this patch gets merged.

Also worth noting: I've been updating a lot of the inline YARD documentation for my own benefit. Thus far most of the functions I've touched now have documentation on the input paramaters and return types.

@Roendal
Copy link
Member

Roendal commented Jul 11, 2012

Thanks for the update and good luck with the challenge. It's indeed a really great one!

You are doing a superb work @damien! Take the time you need!

@Texicitys
Copy link

Hello !

I have the same problem. I want that the subject is optional, I tried this :
conversation.rb :

class Conversation < ActiveRecord::Base
  attr_accessible :subject if Mailboxer.protected_attributes?
  has_many :messages, :dependent => :destroy
  has_many :receipts, :through => :messages
  #TODO Virer l'obligation d un sujet
  #validates_presence_of :subject

messageable.rb

def send_message(recipients, msg_body, subject='', sanitize_text=true, attachment=nil, message_timestamp = Time.now)
        convo = Conversation.new({:subject => subject})
        convo.created_at = message_timestamp
        convo.updated_at = message_timestamp
        message = messages.new({:body => msg_body, :subject => subject, :attachment => attachment})

But when I try :
current_user.send_message(current_user, 'salut')

Nothing happend.. What did I miss? Can I accept a mail without subject ?

Thank you for your help !

@w3irdrobot
Copy link
Contributor

The Mailboxer::Notification class also requires a subject. That is probably why it didn't work for you.

@Joe312341
Copy link

Was this change ever submitted (ability to reply without a subject) ?

@stevelacey
Copy link

stevelacey commented Aug 31, 2016

Anyone reading – I opt for setting the subject to - and then never showing it anywhere.

¯_(ツ)_/¯

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants