attachment in send-email is causing an error "argument list too long" in docker
There is a limit in linux that only allow certain amount of bytes in the argument of a single command I'm not sure if this is an issue with my specific my environment but a 200KB attachment could break this limit
To reproduce
- mgc login
- generate a file that is ~ 200kb
- update the command in
contentBytesthen run it
mgc users send-mail post \
--body '{
"message": {
"subject": "hi",
"body": {
"contentType": "text",
"content": "test"
},
"toRecipients": [
{
"emailAddress": {
"address": "[email protected]"
}
}
],
"attachments": [
{
"@odata.type": "#microsoft.graph.fileAttachment",
"name": "screenshot.png",
"contentBytes": "'"$(cat ./file.png | base64)"'",
"contentId": "screenshot"
}]
},
"saveToSentItems": "false"
}'
Fix
Allow user to supply the their --body payload in a separate file like what CURL did? see @filename in the below doc
https://everything.curl.dev/http/post/simple.html
Hello @brotherko, thanks for reporting this issue. The CLI supports using response files to get around argument limits in shells. You can create a text file (e.g. args.rsp), enter each arg separated by spaces, then use mgc users send-mail post @args.rsp.
The syntax rules for response files are defined in the page linked above.
Let me know if this information helps with your issue.
Hi @calebkiage Thanks! I'm wondering if this is a well known pattern for a .NET application to support syntax like this by default? I think it might be helpful to put it in the README for anyone who didn't work on a .NET application before(like myself)
However, still, I had a hard time crafting a JSON string that works.
- Double quote is automatically removed during execution even when I escape it with back slash
- Space is treated as a new token
This is what I've tried (I know it's not a valid request for the send-mail api. I just want to see if it parses the string properly)
--user-id
1234567
--body
"{\"name\":\"test\"\}"
This is what I got:
Unrecognized command or argument 'name\:\test\\}'.
Hello @brotherko, this is a limitation of the commandline parser we use currently. It doesn't support escaping quotes very well. See https://github.com/dotnet/command-line-api/issues/1755 and https://github.com/dotnet/command-line-api/issues/1758
We might need to customize the response file parsing logic like the .NET team did for the dotnet cli (https://github.com/dotnet/runtime/pull/76271)
Understood so I assume there is no work around for this issue? Would it be on the road map anytime soon?
Hi @brotherko, for now there's no workaround without a code change. Would you be willing to contribute code for this? We accept community contributions, and it would be the fastest way to get this change out. I'm happy to guide you through the process.